Browse Source

Merge remote-tracking branch 'origin/master'

yurk 2 years ago
parent
commit
d92be58a9a

+ 145 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -85,6 +85,7 @@
                             <el-dropdown-item v-if="permissions.projectClassification">
                                 <el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
                             </el-dropdown-item>
+                            <!-- <el-dropdown-item v-if="user.timeType.mainProjectState == 1 && !permissions.projectClassification"> -->
                             <el-dropdown-item v-if="user.timeType.mainProjectState == 1">
                                 <el-link type="primary" :underline="false" @click="mainProjectDialog = true">主项目管理</el-link>
                             </el-dropdown-item>
@@ -105,9 +106,8 @@
                 </el-form-item>
             </el-form>
         </el-col>
-
         <!--列表-->
-        <el-table ref="projectlistOfWudulist" :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="checkedWudulist" @sort-change="tableSort">
+        <el-table ref="projectlistOfWudulist" @cell-click="clickCell" :cell-class-name="tableCellClassName" :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;" @selection-change="checkedWudulist" @sort-change="tableSort">
             <el-table-column type="selection" width="60" :selectable="isSelectable">
                 <!-- creator 项目创建人    incharger 项目负责人 -->
             </el-table-column>
@@ -116,9 +116,9 @@
                         {{scope.$index+1+(page-1)*size}}
                     </template>
             </el-table-column> -->
-            <el-table-column prop="projectCode" label="项目编号" sortable width="120"></el-table-column>
-            <el-table-column prop="categoryName" label="项目分类" sortable width="120"></el-table-column>
-            <el-table-column prop="projectName" label="项目名称" width="250" sortable>
+            <el-table-column prop="projectCode" label="项目编号" sortable="custom" width="120"></el-table-column>
+            <el-table-column prop="categoryName" label="项目分类" sortable="custom" width="120"></el-table-column>
+            <el-table-column prop="projectName" label="项目名称" width="250" sortable="custom">
                  <template slot-scope="scope">
                      <!-- <div class="kans">
                          <el-link type="primary" v-if="user.company.packageProject==1" :href="'#/projectInside/'+scope.row.id">{{scope.row.projectName}}</el-link>
@@ -145,6 +145,21 @@
                     <el-link type="primary" :underline="false" @click="showUser(scope.row.inchargerId)">{{scope.row.inchargerName}}</el-link>
                 </template>
             </el-table-column>
+
+            <!-- 项目阶段 -->
+            <el-table-column prop="inchargerName" label="项目阶段" sortable="custom" min-width="150" width="220" v-if="user.company.packageProject == 1">
+                <template slot-scope="scope">
+                    <span style="display: inline-block; width: 150px">
+                        <el-select v-model="phaseProjectValie" v-if="scope.row.index + ',' + scope.column.index == currentCell" :ref="scope.row.index + ',' + scope.column.index" filterable placeholder="请选择项目阶段" size="mini" @blur="hideSelect" @change="selectChange">
+                            <el-option v-for="(item, index) in phaseList" :key="index" :label="item" :value="item"> </el-option>
+                        </el-select>
+                        <el-link v-else type="primary" :underline="false">{{scope.row.currentStage == null ? '暂无' : scope.row.currentStage}}</el-link>
+                    </span> 
+                    
+                    <el-link v-if="(permissions.projectManagement || user.id==scope.row.inchargerId || user.id==scope.row.creatorId) && scope.row.index + ',' + scope.column.index != currentCell" type="primary" :underline="false"><i class="el-icon-edit"></i></el-link> 
+                </template>
+            </el-table-column>
+
             <el-table-column prop="participator" label="参与者" :min-width="user.company.packageCustomer != 1 ? '' : '300'" sortable v-if="user.company.packageProject==0">
                 <template slot-scope="scope">
                     <!-- <v-for v-for="par in scope.row.participator" :key="par.id" >
@@ -184,11 +199,17 @@
                 </div>
             </template>
             </el-table-column>
+            <!-- 级别 -->
+            <el-table-column prop="level" label="级别" min-width="190"   v-if="user.company.packageProject == 1" sortable="custom">
+                <template slot-scope="scope">
+                    {{importanceListLable[scope.row.level - 1]}}
+                </template>
+            </el-table-column>
             <!-- 供应商 -->
             <el-table-column prop="providerNames" label="供应商" min-width="190" v-if="user.company.packageProvider">
             </el-table-column>
 
-            <el-table-column prop="status" label="状态" min-width="100" >
+            <el-table-column prop="status" label="状态" min-width="100" sortable="custom">
                 <template slot-scope="scope">
                     {{scope.row.status == null?"-":statusTxt[scope.row.status]}}
                 </template>
@@ -213,7 +234,7 @@
                         完成
                         <el-dropdown-menu slot="dropdown" class="customdropdown_menu">
                             <el-button size="mini"  @click="cancelPro(scope.row)" class="customdropdown_menu_btn">撤销</el-button><br>
-                            <el-button size="mini"  @click="suspendPro(scope.row)" class="customdropdown_menu_btn">暂停</el-button>
+                            <el-button size="mini"  @click="suspendPro(scope.row)" class="customdropdown_menu_btn">暂停</el-button><br>
                         </el-dropdown-menu>
                     </el-dropdown>
                     <el-button v-if="(permissions.projectManagement || user.id==scope.row.inchargerId || user.id==scope.row.creatorId) && scope.row.status >= 2" size="mini"  @click="restartPro(scope.row)">重启</el-button>
@@ -250,14 +271,14 @@
                     <el-input v-model="addForm.code" :disabled="!permissions.projectManagement && addForm.creatorId != user.id" placeholder="请输入项目编号" clearable></el-input>
                 </el-form-item>
                  <el-form-item label="主项目" v-if="user.timeType.mainProjectState == '1'">
-                    <el-select v-model="addForm.projectMainId" clearable :disabled="!permissions.projectManagement && addForm.creatorId != user.id">
+                    <el-select v-model="addForm.projectMainId" clearable :disabled="!permissions.projectManagement && addForm.creatorId != user.id" @change="projectManagementChange">
                         <el-option v-for="(item) in mainProjectList" :key="item.id" :value="item.id" :label="item.name + '\u3000' + item.code">
                             <span style="float: left; color: #8492a6; font-size: 13px;">{{ item.code }}</span>
                             <span style="float: right;margin-left: 20px">{{ item.name }}</span>
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="项目分类">
+                <el-form-item label="项目分类" v-if="user.timeType.mainProjectState != '1'">
                     <el-select v-model="addForm.category"  style="width:32%;" clearable :disabled="!permissions.projectManagement && addForm.creatorId != user.id">
                         <el-option v-for="(item) in baseClfList" :key="item.id" :value="item.id" :label="item.name"></el-option>
                     </el-select>
@@ -583,13 +604,13 @@
         <!-- 新增/编辑主项目 -->
         <el-dialog title="新增/修改主项目" v-if="addFlgmainProjectDialog" :visible.sync="addFlgmainProjectDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-form ref="form2" :model="addMainForm" :rules="rules" label-width="100px">
-                <el-form-item label="主项目名称" prop="name">
-                    <el-input v-model="addMainForm.name" placeholder="请输入名称" clearable></el-input>
-                </el-form-item>
                 <el-form-item label="主项目编号" prop="code">
                     <el-input v-model="addMainForm.code" placeholder="请输入编号" clearable></el-input>
                 </el-form-item>
-                <el-form-item label="分类管理">
+                <el-form-item label="主项目名称" prop="name">
+                    <el-input v-model="addMainForm.name" placeholder="请输入名称" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="项目分类">
                     <el-select v-model="addMainForm.categoryId" placeholder="请选择分类" clearable >
                         <el-option v-for="item in baseClfList" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
@@ -832,6 +853,7 @@ a {
                 status:"1",
                 statusTxt:["-","进行中","已完成","已撤销","已暂停"],
                 importanceList:[{id:1,label:'正常'},{id:2,label:'紧急'},{id:3,label:'重要'},{id:4,label:'重要且紧急'}],
+                importanceListLable:['正常', '紧急', '重要', '重要且紧急', '低风险', '中风险', '高风险'],
                 searchField:'1',
                 keyword:null,
                 user: JSON.parse(sessionStorage.getItem("user")),
@@ -907,7 +929,11 @@ a {
                 projectMainId: '',
                 supplierList: '',
                 sortProp: '',
-                sortOrder: null
+                sortOrder: null,
+                currentCell: null, // 当前单击的是哪一个单元格
+                phaseList: [],
+                phaseProjectId: '', // 阶段项目id
+                phaseProjectValie: null, // 阶段项目值
             };
         },
         // 过滤器
@@ -940,8 +966,90 @@ a {
             }
         },
         methods: {
+            // 获取阶段
+            obtainPhase(item) {
+                this.http.post('/stages/getProjectStages', {
+                    projectId: item.id
+                },
+                res => {
+                    if (res.code == "ok") {
+                        // this.phaseList = res.data
+                        this.$set(this, 'phaseList', res.data)
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+            // 表格点击
+            tableCellClassName({row, column, rowIndex, columnIndex}) {
+                row.index=rowIndex;
+                column.index=columnIndex;
+            },
+            clickCell(row,column) {
+                console.log(this.permissions.projectManagement || this.user.id==row.inchargerId || this.user.id==row.creatorId)
+                if(this.permissions.projectManagement || this.user.id==row.inchargerId || this.user.id==row.creatorId) {
+                    this.phaseProjectValie = row.currentStage ? row.currentStage : ''
+                    this.currentCell = row.index + ',' + column.index;
+                    if(column.index == 5) {
+                        this.phaseProjectId = row.id
+                        this.obtainPhase(row)
+                    }
+                    setTimeout(() => {
+                        // 获得焦点
+                        this.$refs[row.index + ',' + column.index].focus();
+                    })
+                }
+            },
+            selectChange() {
+                this.http.post('/project/changeCurrentStage', {
+                    projectId: this.phaseProjectId,
+                    currentStage: this.phaseProjectValie 
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.getList()
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+            hideSelect() {
+                var that = this
+                setTimeout(() => {
+                    that.currentCell = null
+                }, 500)
+            },
+            // 点击主项目事件
+            projectManagementChange() {
+                let categoryId = ''
+                for(var i in this.mainProjectList) {
+                    if(this.mainProjectList[i].id == this.addForm.projectMainId) {
+                        categoryId = this.mainProjectList[i].categoryId
+                    }
+                }
+                categoryId == '' ?  '' : this.addForm.category = categoryId
+                console.log(this.addForm)
+            },
             tableSort({column, prop, order}){
-                if(prop == 'inchargerName' || prop == 'customerName'){
+                if(prop == 'inchargerName' || prop == 'customerName' || prop == 'projectCode' || prop == 'categoryName' || prop == 'projectName' || prop == 'status'){
                     this.sortOrder = order
                     this.sortProp = prop
                     this.getList()
@@ -2300,20 +2408,26 @@ a {
                     category: this.statusClf,
                     projectMainId: this.projectMainId
                 }
-                if(this.sortOrder == 'descending'){
+                if(this.sortOrder){
                     if(this.sortProp == 'inchargerName'){
                         parameter.sortProp = "incharger_id"
-                    }else{
+                    }else if(this.sortProp == 'customerName'){
                         parameter.sortProp = "customer_id"
+                    }else if(this.sortProp == 'projectCode'){
+                        parameter.sortProp = 'project_code'
+                    }else if(this.sortProp == 'categoryName'){
+                        parameter.sortProp = 'category'
+                    }else if(this.sortProp == 'projectName'){
+                        parameter.sortProp = 'project_name'
+                    }else if(this.sortProp == 'status'){
+                        parameter.sortProp = 'status'
                     }
-                    parameter.sortOrder = 0
-                }else if(this.sortOrder == 'ascending'){
-                    if(this.sortProp == 'inchargerName'){
-                        parameter.sortProp = "incharger_id"
-                    }else{
-                        parameter.sortProp = "customer_id"
+
+                    if(this.sortOrder == 'descending'){
+                        parameter.sortOrder = 0
+                    }else if(this.sortOrder == 'ascending'){
+                        parameter.sortOrder = 1
                     }
-                    parameter.sortOrder = 1
                 }
                 this.http.post(this.port.project.listPage, parameter,
                 res => {
@@ -2853,6 +2967,13 @@ a {
             if(this.user.timeType.mainProjectState == 1){
                 this.getMainProject()
             }
+
+            // 判断释放为专业版
+            if(this.user.company.packageProject == 1) {
+                this.importanceList = [{id:1,label:'正常'},{id:5,label:'低风险'},{id:6,label:'中风险'},{id:7,label:'高风险'},{id:2,label:'紧急'},{id:3,label:'重要'},{id:4,label:'重要且紧急'}]
+            } else {
+                this.importanceList = [{id:1,label:'正常'},{id:2,label:'紧急'},{id:3,label:'重要'},{id:4,label:'重要且紧急'}]
+            }
             
         }
     };

+ 24 - 5
fhKeeper/formulahousekeeper/timesheet/src/views/project/project_gantt.vue

@@ -26,7 +26,14 @@
         @change="dateupdata()">
       </el-date-picker>
       </div>
-
+      <!-- 任务类型筛选 -->
+      <div v-if="radio1 == '按项目查看'" class="head_taskType">
+        <span>任务类型</span>
+        <el-select clearable filterable v-model="taskType" placeholder="请选择" size="small" style="margin-left:9px;width:10vw" @change="taskTypeSel()">
+        <el-option label="任务" :value="0"></el-option>
+        <el-option label="里程碑" :value="1"></el-option>
+      </el-select>
+      </div>
       <!-- 任务分组筛选 -->
       <div v-if="reqpar1" class="head_taskgroup">
         <span>任务分组</span>
@@ -162,6 +169,7 @@ export default {
   components: {Gantt},
   data () {
     return {
+      taskType: '',
       isDataLoaded:false,
       tasks: {
         data : [],
@@ -200,6 +208,11 @@ export default {
           this.$refs.ganttTable1.setGroup();
           // this.$refs.ganttTable2.setGroup();
       },
+      taskTypeSel(){
+        console.log(this.taskType);
+        
+        this.getList()
+      },
       // 资源需求导出
       exportProjectData() {
         let parameter = {}
@@ -441,6 +454,8 @@ export default {
           if(this.valuex2 != ''){
             getlistcs.groupName = this.valuex2
           }
+          getlistcs.taskType = this.taskType
+          
         }else {
           if(this.valuex != ''){
             getlistcs.userId = this.valuex
@@ -592,14 +607,18 @@ export default {
     align-items: center;
   }
   .gantt_head .head_RorX{
-    width: 22vw;
+    width: 16vw;
   }
   .gantt_head .head_date{
-    width: 24vw;
+    width: 22vw;
   }
   .gantt_head .head_taskgroup{
-    width: 16vw;
+    width: 15vw;
   }
+  .gantt_head .head_taskType{
+    width: 15vw;
+  }
+  
   .gantt_head .head_select{
     width: 15vw;
   }
@@ -609,6 +628,6 @@ export default {
   .poss {
     height: 8%;
     float: right;
-    padding-top: 15px;
+    padding-top: 5px;
 }
 </style>

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

@@ -53,8 +53,8 @@
                 <el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                     <el-table-column type="index" width="60">
                         <template slot-scope="scope" >
-                                {{scope.$index+1+(page-1)*size}} 
-                            </template>
+                            {{scope.$index+1+(page-1)*size}} 
+                        </template>
                     </el-table-column>
                     <el-table-column prop="stagesName" label="任务阶段" sortable width="180" @mouseover="mouseOver">
                     </el-table-column>