Parcourir la source

调整中英文切换,增加关键节点

Lijy il y a 2 ans
Parent
commit
6c822be072

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/routes.js

@@ -312,7 +312,7 @@ export const allRouters = [//组织架构
             { path: '/awayOffice', component: awayOffice, name: '出差管理' }
         ],
         // 其他信息
-        meta: { text: 'navigation.askForLeaveManagement' } 
+        meta: { text: 'navigation.evectionManagement' } 
     }, 
     {
         path: '/',

+ 131 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -108,6 +108,24 @@
                         <el-button class="el-icon-plus" @click="addMembVisible=true" size="mini"></el-button>
                     </div>
                 </div>
+
+                <div class="box" style="margin-top:10px;" v-if="user.companyId == '936'">
+                    <div><label>关键节点</label>
+                        <el-link v-if="user.id == project.creatorId || user.id == project.inchargerId || permissions.projectManagement" @click="showEditParKeyNode" style="float:right;"><i class="el-icon-edit"  ></i></el-link>
+                    </div>
+                    <el-table :data="keyNodesList" style="width: 100%">
+                        <el-table-column prop="nodesName" label="节点名称" width="300"></el-table-column>
+                        <el-table-column prop="planCompleteDate" label="计划完成时间" width="150"></el-table-column>
+                        <el-table-column prop="actualCompleteDate" label="实际完成时间" width="150"></el-table-column>
+                        <el-table-column prop="states" label="状态" width="80">
+                            <template slot-scope="scope">
+                                <div>
+                                    {{scope.row.states == '0' ? '正常' : (scope.row.states == '1' ? '预期' : '完成')}}
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </div>
                 <!-- <div class="box info" style="margin-top:10px;" v-if="permissions.projectBaseline">
                     <div><label>成本基线<el-link v-if="permissions.projectCorrection" @click="showEditBase" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
                     <el-row :gutter="10">
@@ -519,7 +537,38 @@
                 <el-button type="primary" @click="addPpMemb" >确定</el-button>
             </div>
         </el-dialog>
-
+        <!-- 编辑项目关键节点 -->
+        <el-dialog title="编辑项目关键节点" :visible.sync="keyNodeIsShow" width="960px" :before-close="handleClose">
+            <div>
+                <!--新版 -->
+                <div class="keyNodes">
+                    <div class="keyNodesName">节点名称</div>
+                    <div class="keyNodesTime">计划完成时间</div>
+                    <div class="keyNodesTime">实际完成时间</div>
+                    <div class="keyNodesTime">状态</div>
+                </div>
+                <div class="keyNodes" v-for="item in projectKeyNodesData" :key="item.nodesId">
+                    <div class="keyNodesName">{{item.nodesName}}</div>
+                    <div class="keyNodesTime">
+                        <el-date-picker v-model="item.planCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd"  value-format="yyyy-MM-dd" type="date"  placeholder="选择日期"></el-date-picker>
+                    </div>
+                    <div class="keyNodesTime">
+                        <el-date-picker v-model="item.actualCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd"  value-format="yyyy-MM-dd" type="date"  placeholder="选择日期"></el-date-picker>
+                    </div>
+                    <div class="keyNodesTime">
+                        <el-select v-model="item.states" placeholder="请选择" style="width: 80%" size="small">
+                            <el-option label="正常" value="0"></el-option>
+                            <el-option label="预期" value="1"></el-option>
+                            <el-option label="完成" value="2"></el-option>
+                        </el-select>
+                    </div>
+                </div>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="keyNodeIsShow = false">取 消</el-button>
+                <el-button type="primary" @click="submitKeyNodeaddForm()">确 定</el-button>
+            </span>
+        </el-dialog>
         
         <!-- 按部门选择相关领导,弃用 -->
         <!-- <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
@@ -565,6 +614,24 @@
 .line span:nth-child(even){
     float:right;
 }
+.keyNodes {
+    display: flex;
+    width: 100%;
+    box-sizing: border-box;
+    padding: 10px 30px;
+}
+.keyNodes .keyNodesTime {
+    width: 190px;
+    display: flex;
+    justify-content: center;
+}
+.keyNodes .keyNodesName {
+    width: 260px;
+    display: flex;
+    align-items: center;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
 </style>
 <script>
     import util from "../../common/js/util";
@@ -636,7 +703,10 @@
                 contractRecordLoading: false,
                 contractRecordData: [],
                 levelList: [],
-                departmentList: []
+                departmentList: [],
+                keyNodesList: [],
+                projectKeyNodesData: [],
+                keyNodeIsShow: false,
             };
         },
         filters: {
@@ -656,6 +726,33 @@
             }
         },
         methods: {
+            // 提交关键节点
+            submitKeyNodeaddForm() {
+                this.http.post('/project-key-nodes/edit',{
+                    projectId: this.project.id,
+                    data: JSON.stringify(this.projectKeyNodesData)
+                },res => {
+                    if(res.code == 'ok'){
+                        this.keyNodeIsShow = false
+                        this.getKeyNodes()
+                        this.$message({
+                            message: '修改成功',
+                            type: 'success'
+                        });
+                    }else {
+                        this.$message({
+                            message: res.msg,
+                            type: 'error'
+                        })
+                    }
+                },err => {
+                    this.keyNodeIsShow = false
+                    this.$message({
+                        message: err,
+                        type: 'error'
+                    })
+                })
+            },
             filterUserContract(uid){
                 let user = this.users.filter(item => item.id == uid)
                 if(user.length > 0){
@@ -1335,10 +1432,11 @@
                 var find = false;
                 this.project.participationList = [];
                 this.addForm.userId.forEach(u=>{
-                    // var findUser = this.users.filter(au=>au.id == u)[0];
-                    var findUser = this.users.filter(au=>au.id == u);
+                    var findUser = this.users.filter(au=>au.id == u)[0];
+                    // var findUser = this.users.filter(au=>au.id == u);
                     this.project.participationList.push(findUser);
                 })
+                console.log(this.project.participationList, '看看')
             },
             getUsers() {
                 // this.http.post(this.port.manage.list, {
@@ -1576,6 +1674,11 @@
                 this.pVisible = true;
                 
             },
+            showEditParKeyNode() {
+                console.log('出发了')
+                this.keyNodeIsShow = true
+                this.projectKeyNodesData = JSON.parse(JSON.stringify(this.keyNodesList))
+            },
             //显示用户详情
             showUser(userId) {
                 this.userDetailVisible = true;
@@ -1814,6 +1917,26 @@
                 this.getProjectBaseData(this.curProjectId);
                 this.getProjectNotifyUserList(this.curProjectId);
                 this.getProgressData();
+            },
+            getKeyNodes() {
+                this.http.post('/project-key-nodes/get', {
+                    projectId: this.curProjectId
+                },
+                    res => {
+                    if (res.code == "ok") {
+                        this.keyNodesList = res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                    },error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
             }
         },
         created() {
@@ -1841,7 +1964,10 @@
             this.yanjiuzx()
             this.getProjectLevel()
             if(this.user.timeType.projectWithDept) {
-                this.getDepartmentList()
+                this.getProjectLevel()
+            }
+            if(this.user.companyId == '936') {
+                this.getKeyNodes()
             }
         }
     };

+ 220 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -82,6 +82,10 @@
                             <el-dropdown-item v-if="user.company.packageProject == 1 && permissions.projectCostOfItems">
                                 <el-link type="primary" :underline="false" @click="showBaseCostItemDialog">基线成本项</el-link>
                             </el-dropdown-item>
+                            <!-- <el-dropdown-item v-if="user.company.packageProject == 1 && user.companyId == '936'"> -->
+                            <el-dropdown-item>
+                                <el-link type="primary" :underline="false" @click="keyNodesIsShow = true">关键节点项</el-link>
+                            </el-dropdown-item>
                             <el-dropdown-item v-if="permissions.projectClassification">
                                 <el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
                             </el-dropdown-item>
@@ -554,6 +558,33 @@
                             </div>
                         </div>
                     </el-tab-pane>
+                    <el-tab-pane label="关键节点" name="baseCostPanep" v-if="user.companyId == '936'">
+                        <div style="padding-top:10px;">
+                            <!--新版 -->
+                            <div class="keyNodes">
+                                <div class="keyNodesName">节点名称</div>
+                                <div class="keyNodesTime">计划完成时间</div>
+                                <div class="keyNodesTime">实际完成时间</div>
+                                <div class="keyNodesTime">状态</div>
+                            </div>
+                            <div class="keyNodes" v-for="item in projectKeyNodesData" :key="item.nodesId">
+                                <div class="keyNodesName">{{item.nodesName}}</div>
+                                <div class="keyNodesTime">
+                                    <el-date-picker v-model="item.planCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd"  value-format="yyyy-MM-dd" type="date"  placeholder="选择日期"></el-date-picker>
+                                </div>
+                                <div class="keyNodesTime">
+                                    <el-date-picker v-model="item.actualCompleteDate" clearable style="width: 80%" size="small" :editable="false" format="yyyy-MM-dd"  value-format="yyyy-MM-dd" type="date"  placeholder="选择日期"></el-date-picker>
+                                </div>
+                                <div class="keyNodesTime">
+                                    <el-select v-model="item.states" placeholder="请选择" style="width: 80%" size="small">
+                                        <el-option label="正常" value="0"></el-option>
+                                        <el-option label="预期" value="1"></el-option>
+                                        <el-option label="完成" value="2"></el-option>
+                                    </el-select>
+                                </div>
+                            </div>
+                        </div>
+                    </el-tab-pane>
                     <el-tab-pane label="工程专业" name="engineeringProfession" v-if="user.company.packageEngineering == 1">
                        <div style="padding-top:10px;">
                            <el-table :data="projectProfessionList" size="small" :key="Math.random()">
@@ -695,6 +726,29 @@
                 <el-button type="primary" @click="addNewBaseItem()" >新增成本项</el-button>
             </div>
         </el-dialog>
+
+        <!-- 项目关键节点配置弹出框 -->
+        <el-dialog title="项目关键节点管理" show-header="false" v-if="keyNodesIsShow" :visible.sync="keyNodesIsShow" :close-on-click-modal="false" customClass="customWidth" width="600px">
+            <el-table :data="keyNodesList" highlight-current-row  height="400" style="width: 100%;">
+            <el-table-column type="index" width="60" label="序号">
+                <template slot-scope="scope" >
+                    {{scope.$index+1+(page-1)*size}}
+                </template>
+            </el-table-column>
+            <el-table-column prop="name" label="名称" ></el-table-column>
+            <el-table-column label="操作" width="150">
+                <template slot-scope="scope" >
+                    <el-button size="small" type="primary" @click="addNewkeyNodes(scope.row)">编辑</el-button>
+                    <el-button size="small" type="danger" @click="deletekeyNodes(scope.row)">删除</el-button>
+                </template>
+            </el-table-column>
+
+            </el-table>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="keyNodesIsShow = false" >关闭</el-button>
+                <el-button type="primary" @click="addNewkeyNodes()" >新增关键节点</el-button>
+            </div>
+        </el-dialog>
         <!-- 分类条目配置 -->
         <el-dialog title="项目分类条目管理" show-header="false" v-if="showClfDialog" :visible.sync="showClfDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-table :data="baseClfList" highlight-current-row  height="400" style="width: 100%;">
@@ -862,6 +916,18 @@
             </div>
         </el-dialog>
 
+        <el-dialog title="新增/修改关键节点" v-if="addBasekeyNodesialog" :visible.sync="addBasekeyNodesialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <el-form ref="form2" :model="addFormkeyNodes" :rules="rules" label-width="120px">
+                <el-form-item label="关键节点名称" prop="name">
+                    <el-input v-model.trim="addFormkeyNodes.name" placeholder="请输入名称" clearable></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click.native="addBasekeyNodesialog = false">取消</el-button>
+                <el-button type="primary" @click="submitkeyNodes" :loading="addLoading">提交</el-button>
+            </div>
+        </el-dialog>
+
         <!-- 按部门选择人员 -->
         <el-dialog title="选择参与人员"  v-if="chooseParticipVisible" :visible.sync="chooseParticipVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
@@ -1196,8 +1262,15 @@ a {
                 batchInchargerDialog: false,
                 paramInchargerId: '',
 
-                inchagerId: ''
+                inchagerId: '',
 
+                keyNodesIsShow: false,
+                keyNodesList: [],
+                projectKeyNodesData: [],
+                addBasekeyNodesialog: false,
+                addFormkeyNodes: {
+                    name: ''
+                }
             };
         },
         // 过滤器
@@ -1243,6 +1316,37 @@ a {
             })
         },
         methods: {
+            addNewkeyNodes(row) {
+                this.addBasekeyNodesialog = true
+                if(row) {
+                    this.addFormkeyNodes = row
+                } else {
+                    this.addFormkeyNodes = {
+                        name: ''
+                    }
+                }
+            },
+            // 获取关键节点
+            getkeyNodes() {
+                this.http.post('/project-key-nodes-setting/list', {},
+                res => {
+                    if (res.code == "ok") {
+                        // this.keyNodesIsShow = true
+                        this.keyNodesList = res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             hoverCall(row) {
                 this.rowid=row.id
             },
@@ -2652,6 +2756,43 @@ a {
                     );
                 
             },
+            deletekeyNodes(row) {
+                this.$confirm("该操作可能造成已有数据丢失,确定要删除吗?","删除关键节点", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                })
+                .then(() => {
+                    this.listLoading = true;
+                    this.http.post('/project-key-nodes-setting/delete',{ 
+                        id: row.id 
+                    },
+                    res => {
+                        this.listLoading = false;
+                        if (res.code == "ok") {
+                            this.$message({
+                                message: "删除成功",
+                                type: "success"
+                            });
+                            this.getkeyNodes();
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    },
+                    error => {
+                        this.listLoading = false;
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                        }
+                    );
+                })
+                .catch(() => {});
+            },
             deleteBaseItem(row) {
                 this.$confirm("该操作可能造成已有数据丢失,确定要删除吗?","删除成本基线项", {
                     confirmButtonText: "确定",
@@ -2711,6 +2852,30 @@ a {
                         }
                     );
             },
+            submitkeyNodes() {
+                console.log(this.addForm, '提交的参数')
+                // return
+                this.http.post('/project-key-nodes-setting/addOrMod',this.addFormkeyNodes,
+                res => {
+                    if (res.code == "ok") {
+                        this.addBasekeyNodesialog = false;
+                        this.keyNodesList = res.data;
+                        this.$forceUpdate();
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
             showBaseCostItemDialog() {
                 this.showBaseConfig = true;
             },
@@ -3109,6 +3274,14 @@ a {
                     for (var m=0;m<this.baseCostItemList.length; m++) {
                         this.projectBaseCostData.push({baseId: this.baseCostItemList[m].id, baseName:this.baseCostItemList[m].name, baseAmount:0});
                     }
+                    // 关键节点
+                    if(this.user.companyId == '936') {
+                        this.projectKeyNodesData = []
+                        for (var m=0;m<this.keyNodesList.length; m++) {
+                            this.projectKeyNodesData.push({nodesId: this.keyNodesList[m].id, nodesName:this.keyNodesList[m].name, planCompleteDate: null, actualCompleteDate: null, states: '0'});
+                        }
+                        console.log(this.projectKeyNodesData, '节点值')
+                    }
                 } else {
                     this.title = "修改项目";
                     var list = item.participator;
@@ -3241,6 +3414,7 @@ a {
                     // console.log(this.auseList)
                     this.changeParticipator();
                     this.getProjectBaseData(item.id);
+                    this.getProjectKeyNodeData(item.id)
                     if (this.user.company.packageEngineering == 1) {
                         this.getProjectProfessions(item.id);
                         
@@ -3303,7 +3477,27 @@ a {
                             }
                         );
             },
-
+            getProjectKeyNodeData(projectId) {
+                this.http.post('/project-key-nodes/get',{projectId: projectId},
+                res => {
+                    if (res.code == "ok") {
+                       this.projectKeyNodesData = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
             //提交子项目创建修改请求
             submitInsertSubProject () {
                 this.$refs.form2.validate(valid => {
@@ -3477,6 +3671,8 @@ a {
                              formData.append("projectCategorySub", this.addForm.projectCategorySub ? this.addForm.projectCategorySub : '');
                              formData.append("region", this.addForm.region ? this.addForm.region : '');
                              formData.append("bu", this.addForm.bu ? this.addForm.bu : '');
+                            //  关键节点
+                            formData.append("projectKeyNodesData", JSON.stringify(this.projectKeyNodesData));
                         }
                         if(this.user.companyId == '428') {
                              formData.append("projectCategorySub", this.addForm.projectCategorySub ? this.addForm.projectCategorySub : '');
@@ -3720,6 +3916,10 @@ a {
             if(this.user.timeType.projectWithDept) {
                 this.getDepartmentList()
             }
+
+            if(this.user.companyId == '936') {
+                this.getkeyNodes()
+            }
         }
     };
 </script>
@@ -3743,6 +3943,24 @@ a {
     white-space: nowrap;
     text-overflow: ellipsis;
 }
+.keyNodes {
+    display: flex;
+    width: 100%;
+    box-sizing: border-box;
+    padding: 10px 30px;
+}
+.keyNodes .keyNodesTime {
+    width: 190px;
+    display: flex;
+    justify-content: center;
+}
+.keyNodes .keyNodesName {
+    width: 260px;
+    display: flex;
+    align-items: center;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
 
 // 111
 

+ 3 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -2732,6 +2732,9 @@ import delete$ from 'dingtalk-jsapi/api/biz/cspace/delete';
                 this.$refs.summary.refreshPage();
                 this.$refs.costbaseline.refreshPage();
                 this.$refs.earning.refreshPage();
+                if(this.user.companyId == '936') {
+                    this.$refs.projectInfo.getKeyNodes()
+                }
             },
             //获取我的项目列表
             getMyProjectList() {