瀏覽代碼

策划部任务

liuhj 3 天之前
父節點
當前提交
ccd009dfc2
共有 1 個文件被更改,包括 209 次插入175 次删除
  1. 209 175
      src/components/OP/ConferenceTask.vue

+ 209 - 175
src/components/OP/ConferenceTask.vue

@@ -4,25 +4,25 @@
             <div class="ConferenceTask-Search-ul">
                 <div class="ConferenceTask-Search-li">
                     <label>选择团组:</label>
-                    <el-select size="small" style="width:200px" v-model="Groupid" filterable placeholder="请选择">
-                        <el-option v-for="item in GroupidArr" :key="item.id" :label="item.name" :value="item.id">
+                    <el-select @change="ConfProcessDetails" size="small" style="width:200px" v-model="Groupid" filterable placeholder="请选择">
+                        <el-option v-for="item in GroupidArr" :key="item.id" :label="item.groupName" :value="item.id">
                         </el-option>
                     </el-select>
                 </div>
                 <div class="ConferenceTask-Search-li">
                     <label>情况选择:</label>
-                    <el-select size="small" style="width:200px" v-model="Situation" filterable placeholder="请选择">
-                        <el-option v-for="item in SituationArr" :key="item.id" :label="item.name" :value="item.id">
+                    <el-select :disabled="SituationEditing" @change="ConfProcessChangeNodeTempSave" size="small" style="width:200px" v-model="Situation" filterable placeholder="请选择">
+                        <el-option v-for="item in SituationArr" :key="item.tempId" :label="item.tempName" :value="item.tempId">
                         </el-option>
                     </el-select>
                 </div>
             </div>
-             <el-button size="small" type="primary">保存</el-button>
+             <!-- <el-button size="small" type="primary">保存</el-button> -->
         </div>
-        <div class="ConferenceTask-diagram">
-            <div :class="item.statusText == '已完成' ? 'ConferenceTask-diagram-' + activities.length + 's' : 'ConferenceTask-diagram-' + activities.length"
-                v-for="(item, index) in activities" :key="index">
-                <el-popover v-if="item.nodeDescTips != ''" placement="top-start" title="PS" width="200" trigger="hover"
+        <div class="ConferenceTask-diagram" v-for="(items, index) in activities" :key="index">
+            <div :class="item.statusText == '已完成' ? 'ConferenceTask-diagram-' + items.nodes.length + 's' : 'ConferenceTask-diagram-' + items.nodes.length"
+                v-for="(item, index) in items.nodes" :key="index">
+                <el-popover @click="ConfProcessUpdateNodeStatus(item)" v-if="item.nodeDescTips != ''" placement="top-start" title="PS" width="200" trigger="hover"
                     :content="item.nodeDescTips">
                     <div style="white-space: pre-wrap;">{{ item.nodeDescTips }}</div>
                     <div slot="reference">
@@ -31,11 +31,17 @@
                         <div>{{ item.operator }}</div>
                         <!-- <div>{{item.opeateTime}}</div> -->
                         <div @click.stop="">
-                            <el-date-picker style="width: 100%;"
+                            <el-date-picker @change="ConfProcessSetActualDone(item)" style="width: 100%;margin-top: 10px;"
                                 size="mini" v-model="item.actualDone" type="datetime" placeholder="选择实际完成时间">
                             </el-date-picker>
-                            <div v-if="item.isEnaPartBtn" @click.stop=""
-                                style="display: flex;align-items: center;margin-top: 5px;">
+                            <el-select @change="ConfProcessSetActualDone(item)" style="width: 100%;margin-top: 10px;" size="mini"  v-model="item.participators" multiple collapse-tags
+                                placeholder="请选择">
+                                <el-option v-for="item in options" :key="item.userId" :label="item.userName"
+                                    :value="item.userId">
+                                </el-option>
+                            </el-select>
+                            <!-- <div v-if="item.isEnaPartBtn" @click.stop=""
+                                style="display: flex;align-items: center;margin-top: 10px;">
                                 <label style="line-height: 1;margin-right: 5px;">是否参与:</label>
                                 <el-radio-group v-model="item.isPart">
                                     <el-radio :label="true">是</el-radio>
@@ -43,17 +49,17 @@
                                 </el-radio-group>
                             </div>
                             <div v-if="item.isEnaAssistBtn" @click.stop=""
-                                style="display: flex;align-items: center;margin-top: 5px">
+                                style="display: flex;align-items: center;margin-top: 10px;">
                                 <label style="line-height: 1;margin-right: 5px;">财务是否协助:</label>
                                 <el-radio-group v-model="item.isAssist">
                                     <el-radio :label="true">是</el-radio>
                                     <el-radio :label="false">否</el-radio>
                                 </el-radio-group>
-                            </div>
+                            </div> -->
                             <div v-if="item.isEnaFileUpBtn" @click.stop=""
-                                style="display: flex;align-items: center;margin-top: 5px;">
+                                style="display: flex;align-items: center;margin-top: 10px;">
                                 <label style="line-height: 1;margin-right: 5px;">是否上传文件:</label>
-                                <el-radio-group v-model="item.isFileUp">
+                                <el-radio-group v-model="item.isFileUp" @change="ConfProcessSetActualDone(item)">
                                     <el-radio :label="true">是</el-radio>
                                     <el-radio :label="false">否</el-radio>
                                 </el-radio-group>
@@ -61,17 +67,23 @@
                         </div>
                     </div>
                 </el-popover>
-                <div v-else>
+                <div v-else @click="ConfProcessUpdateNodeStatus(item)">
                     <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 style="width: 100%;" size="mini"
+                        <el-date-picker @change="ConfProcessSetActualDone(item)" style="width: 100%;margin-top: 10px;" size="mini"
                             v-model="item.actualDone" type="datetime" placeholder="选择实际完成时间">
                         </el-date-picker>
-                        <div v-if="item.isEnaPartBtn" @click.stop=""
-                            style="display: flex;align-items: center;margin-top: 5px;">
+                        <el-select @change="ConfProcessSetActualDone(item)" style="width: 100%;margin-top: 10px;" size="mini" v-model="item.participators" multiple
+                            collapse-tags placeholder="请选择">
+                            <el-option v-for="item in options" :key="item.userId" :label="item.userName"
+                                :value="item.userId">
+                            </el-option>
+                        </el-select>
+                        <!-- <div v-if="item.isEnaPartBtn" @click.stop=""
+                            style="display: flex;align-items: center;margin-top: 10px;">
                             <label style="line-height: 1;margin-right: 5px;">是否参与:</label>
                             <el-radio-group v-model="item.isPart">
                                 <el-radio :label="true">是</el-radio>
@@ -79,17 +91,17 @@
                             </el-radio-group>
                         </div>
                         <div v-if="item.isEnaAssistBtn" @click.stop=""
-                            style="display: flex;align-items: center;margin-top: 5px;">
+                            style="display: flex;align-items: center;margin-top: 10px;">
                             <label style="line-height: 1;margin-right: 5px;">财务是否协助:</label>
                             <el-radio-group v-model="item.isAssist">
                                 <el-radio :label="true">是</el-radio>
                                 <el-radio :label="false">否</el-radio>
                             </el-radio-group>
-                        </div>
+                        </div> -->
                         <div v-if="item.isEnaFileUpBtn" @click.stop=""
-                            style="display: flex;align-items: center;margin-top: 5px;">
+                            style="display: flex;align-items: center;margin-top:10px;">
                             <label style="line-height: 1;margin-right: 5px;">是否上传文件:</label>
-                            <el-radio-group v-model="item.isFileUp">
+                            <el-radio-group v-model="item.isFileUp" @change="ConfProcessSetActualDone(item)">
                                 <el-radio :label="true">是</el-radio>
                                 <el-radio :label="false">否</el-radio>
                             </el-radio-group>
@@ -103,18 +115,18 @@
             <div class="ConferenceTask-Search-ul">
                 <div class="ConferenceTask-Search-li">
                     <label>选择月份:</label>
-                    <el-date-picker @change="CompanyDailyKpiInfo" size="small" style="width:200px" v-model="months" type="month" placeholder="选择月">
+                    <el-date-picker @change="PlanningDailyKpiInfo" size="small" style="width:200px" v-model="months" type="month" placeholder="选择月">
                     </el-date-picker>
                 </div>
                 <div class="ConferenceTask-Search-li">
                     <label>人员名称:</label>
-                    <el-select @change="CompanyDailyKpiInfo" size="small" style="width:200px" v-model="value" filterable placeholder="请选择">
-                        <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id">
+                    <el-select @change="PlanningDailyKpiInfo" size="small" style="width:200px" v-model="value" filterable placeholder="请选择">
+                        <el-option v-for="item in optionss" :key="item.id" :label="item.name" :value="item.id">
                         </el-option>
                     </el-select>
                 </div>
             </div>
-             <el-button @click="CompanyDailyKpiSave" size="small" type="primary">保存</el-button>
+             <el-button @click="PlanningDailyKpiSave" size="small" type="primary">保存</el-button>
         </div>
         <div class="ConferenceTask-Search-table">
             <el-table :data="tableData" border style="width: 100%">
@@ -153,147 +165,151 @@ export default {
             GroupidArr:[],
             Situation:'',
             SituationArr:[],
-            activities:[
-                {
-                    id: 1,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 1,
-                    nodeName: "报批基础资料准备",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "更新报批行程和请示,提供其他报批所需材料,4个工作日内完成。",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                },
-                {
-                    id: 2,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 2,
-                    nodeName: "报批邀请函资料准备",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "客户提供完整名单后,2周内取得邀请函(翻译件)。",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                },
-                {
-                    id: 3,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 3,
-                    nodeName: "获得批件",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "提供完整的报批全套资源。",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                },
-                {
-                    id: 4,
-                    ConferenceTaskI: 1,
-                    nodeOrder: 4,
-                    nodeName: "对接公务",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "请于2026年05月12日内完成该项工作(按进度实际公务活动落实情况,出发前5日落实公务)",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                },
-                {
-                    id: 5,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 5,
-                    nodeName: "参与翻译对接",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: true,
-                    isPart: true,
-                    visaSubNodes: []
-                },
-                {
-                    id: 6,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 6,
-                    nodeName: "商邀文案配合",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: false,
-                    isFileUp: false,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                },
-                {
-                    id: 7,
-                    ConferenceTaskId: 1,
-                    nodeOrder: 7,
-                    nodeName: "票据上传(相关票据)",
-                    overallStatus: 2,
-                    statusText: "进行中",
-                    operator: "-",
-                    opeateTime: "-",
-                    actualDone: "",
-                    nodeDescTips: "请于2026年05月17日内完成该项工作(团组结束前完成)",
-                    isEnaAssistBtn: false,
-                    isAssist: false,
-                    isEnaFileUpBtn: true,
-                    isFileUp: true,
-                    isEnaPartBtn: false,
-                    isPart: false,
-                    visaSubNodes: []
-                }
-            ]
+            activities:[],
+            SituationEditing:false,
+
+            optionss:[],
+            values:'',
         }
     },
     methods: {
+        //获取团组列表
+        ConfProcessGroupNames() {
+            var url = "/api/Groups/ConfProcessGroupNames";
+            var that = this;
+            this.$axios({
+                method: 'get',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.GroupidArr=res.data.data.groupNames;
+                    that.options=res.data.data.participators;
+                    if(that.Groupid==''){
+                        that.Groupid=that.GroupidArr[0].id;
+                    }
+                    that.ConfProcessNodeTempInfos();
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //获取模版列表
+        ConfProcessNodeTempInfos() {
+            var url = "/api/Groups/ConfProcessNodeTempInfos?groupId="+this.Groupid+"&currUserId="+this.userId;
+            var that = this;
+            this.$axios({
+                method: 'get',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.SituationArr=res.data.data;
+                    if(that.Situation==''){
+                        that.Situation=that.SituationArr[0].tempId;
+                    }
+                    that.ConfProcessDetails();
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //获取详情
+        ConfProcessDetails() {
+            var url = "/api/Groups/ConfProcessDetails?groupId="+this.Groupid+"&currUserId="+this.userId;
+            var that = this;
+            this.$axios({
+                method: 'get',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.activities=res.data.data.confProcess;
+                    that.Situation=res.data.data.tempId;
+                    that.SituationEditing=!res.data.data.isNodeTemplSwitchable;
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //获取流程
+        ConfProcessChangeNodeTempSave() {
+            var url = "/api/Groups/ConfProcessChangeNodeTempSave?groupId="+this.Groupid+"&nodeTempId="+this.Situation+"&currUserId="+this.userId;
+            var that = this;
+            this.$axios({
+                method: 'get',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.activities=res.data.data.confProcess;
+                    that.Situation=res.data.data.tempId;
+                    that.SituationEditing=!res.data.data.isNodeTemplSwitchable;
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //流程更新
+        ConfProcessUpdateNodeStatus(val) {
+            var url = "/api/Groups/ConfProcessUpdateNodeStatus";
+            var that = this;
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                },
+                data:{
+                    nodeId:val.id,
+                    currUserId:that.userId
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message.success(res.data.msg);
+                    that.ConfProcessDetails();
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //设置完成时间
+        ConfProcessSetActualDone(val) {
+            var url = "/api/Groups/ConfProcessSetActualDone";
+            var that = this;
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                },
+                data:{
+                    nodeId:val.id,
+                    participators:val.participators,
+                    isFileUp:val.isFileUp,
+                    actualDone:val.actualDone==''?'':that.disposeTime(val.actualDone),
+                    currUserId:that.userId
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message.success(res.data.msg);
+                    that.ConfProcessDetails();
+                } else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
         //获取人员名单
-        CompanyDailyKpiInit() {
-            var url = "/api/PersonnelModule/CompanyDailyKpiInit";
+        PlanningDailyKpiInit() {
+            var url = "/api/PersonnelModule/PlanningDailyKpiInit";
             var that = this;
             this.$axios({
                 method: 'get',
@@ -303,11 +319,11 @@ export default {
                 }
             }).then(function (res) {
                 if (res.data.code == 200) {
-                    that.options=res.data.data;
-                    if(that.value==''){
-                        that.value=that.options[0].id;
+                    that.optionss=res.data.data;
+                    if(that.values==''){
+                        that.value=that.optionss[0].id;
                     }
-                    that.CompanyDailyKpiInfo();
+                    that.PlanningDailyKpiInfo();
                 } else {
                     that.$message.error(res.data.msg);
                 }
@@ -321,14 +337,31 @@ export default {
             var d=date.getDate()>=10?date.getDate():'0'+(date.getDate()).toString();
             return y+'-'+m
         },
+        //处理时间
+        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
+        },
         //获取任务明细
-        CompanyDailyKpiInfo() {
+        PlanningDailyKpiInfo() {
             this.SPLoading=true;
             if (this.months==''||this.months==null){
                 this.$message.error('请选择月份!');
                 return
             }
-            var url = "/api/PersonnelModule/CompanyDailyKpiInfo?month="+this.datetime(this.months)+"&evaluator="+this.value;
+            var url = "/api/PersonnelModule/PlanningDailyKpiInfo?month="+this.datetime(this.months)+"&evaluator="+this.value;
             var that = this;
             this.$axios({
                 method: 'get',
@@ -347,9 +380,9 @@ export default {
             })
         },
         //保存任务
-        CompanyDailyKpiSave() {
+        PlanningDailyKpiSave() {
             this.SPLoading=true;
-            var url = "/api/PersonnelModule/CompanyDailyKpiSave";
+            var url = "/api/PersonnelModule/PlanningDailyKpiSave";
             var that = this;
             this.$axios({
                 method: 'post',
@@ -364,7 +397,7 @@ export default {
             }).then(function (res) {
                 if (res.data.code == 200) {
                     that.$message.success(res.data.msg);
-                    that.CompanyDailyKpiInfo();
+                    that.PlanningDailyKpiInfo();
                 } else {
                     that.SPLoading=false;
                     that.$message.error(res.data.msg);
@@ -374,7 +407,8 @@ export default {
     },
     mounted() {
         this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
-        this.CompanyDailyKpiInit();
+        this.ConfProcessGroupNames();
+        this.PlanningDailyKpiInit();
     }
 }
 </script>