Forráskód Böngészése

分配项目人员

gangyj 3 éve
szülő
commit
c93934c7a8
2 módosított fájl, 218 hozzáadás és 14 törlés
  1. 53 0
      src/api/manager/contractinfo.js
  2. 165 14
      src/views/manager/projectinfo/detail.vue

+ 53 - 0
src/api/manager/contractinfo.js

@@ -34,3 +34,56 @@ export const delFileFromUrl = (url) => {
     }
   })
 }
+
+export const saveUserInfoByProject = (list) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/saveUserInfoByProject',
+    method: 'post',
+    data: list
+  })
+}
+
+export const findAllUserByCondition = (info) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/findAllUserByCondition',
+    method: 'post',
+    data: info
+  })
+}
+export const findUserListByCondition = (info) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/findUserListByCondition',
+    method: 'post',
+    data: info
+  })
+}
+
+export const findUserByName = (name) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/findUserByName',
+    method: 'get',
+    params: {
+      name
+    }
+  })
+}
+
+export const removeUsersByIds = (ids) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/removeUsersByIds',
+    method: 'post',
+    params: {
+      ids
+    }
+  })
+}
+
+export const removeContractInfo = (ids) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/remove',
+    method: 'post',
+    params: {
+      ids
+    }
+  })
+}

+ 165 - 14
src/views/manager/projectinfo/detail.vue

@@ -69,12 +69,44 @@
               <span class="mg-r-10">项目名称</span>
               <el-input v-model="projectForm.projectName" disabled style="width:300px;margin-right:30px;"></el-input>
               <span class="mg-r-10">合同段名称</span>
-              <el-select v-model="cId" placeholder="请选择">
+              <el-select v-model="cId" placeholder="请选择" @change="getUserByCondition">
                 <el-option label="全部"  value=""></el-option>
                 <el-option v-for="item in contractList" :key="item.id" :label="item.contractName"  :value="item.id"></el-option>
               </el-select>
             </div>
             <el-divider></el-divider>
+            <div class="flex jc-al-c mg-b-10">
+              <span>维护人员角色</span>
+              <avue-input-tree :check-strictly="true" v-model="rId" placeholder="请选择" type="tree" :dic="roleList" :props="treeProps"></avue-input-tree>
+              <!-- <el-select v-model="rId" clearable placeholder="请选择" @change="getUserByCondition">
+                <el-option v-for="item in roleList" :key="item.id" :label="item.title"  :value="item.id"></el-option>
+              </el-select> -->
+            </div>
+            <div>
+              <el-table  :data="contractUserList" border height="500" style="width: 100%">
+                <el-table-column prop="name" label="姓名" align="center"></el-table-column>
+                <el-table-column prop="postName" label="岗位" align="center"></el-table-column>
+                <el-table-column prop="phone" label="电话" align="center"></el-table-column>
+                <el-table-column label="操作" align="center">
+                  <template slot-scope="scope">
+                    <el-button
+                      size="mini"
+                      type="danger"
+                      @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+            <div class="flex jc-al-c mg-t-20">
+              <span>添加系内部人员</span>
+              <el-select v-model="userId" filterable placeholder="请输入搜索">
+                <el-option v-for="item in userList" :key="item.id" :label="item.name"  :value="item.id"></el-option>
+              </el-select>
+              <el-button type="success" @click="addUserToProject">添加</el-button>
+              <el-button type="primary">创建新用户</el-button>
+              <el-button type="danger" @click="handleDeletes">全部删除</el-button>
+            </div>
+            <el-divider></el-divider>
           </div>
         </el-tab-pane>
       </el-tabs>
@@ -83,7 +115,8 @@
         <div></div>
         <div>
           <el-button type="success" size="medium" @click="saveQuit">保存并退出</el-button>
-          <el-button type="info" size="medium" @click="saveNext">保存并进入下一步</el-button>
+          <el-button type="info" size="medium" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
+          <el-button type="info" size="medium" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
         </div>
       </div>
     </div>
@@ -92,7 +125,9 @@
 
 <script>
   import {submitProject,getProjectDeatil} from "@/api/manager/projectinfo";
-  import {findContractByProjectId} from "@/api/manager/contractinfo";
+  import {findContractByProjectId,saveUserInfoByProject,findUserListByCondition,
+          findUserByName,removeUsersByIds} from "@/api/manager/contractinfo";
+  import {getRoleTree} from "@/api/system/role";
   import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
   export default {
@@ -121,6 +156,16 @@
 
         contractList:[],
         cId:'',
+        rId:'',
+        roleList:[],
+        userId:'',
+        userList:[],
+        contractUserList:[],
+
+        treeProps:{
+          label:"title",
+          value:"id"
+        }
       }
     },
     computed: {
@@ -135,11 +180,10 @@
       },
       activeType: function (newValue) {
         if(newValue == '3'){
-          if(this.contractList.length < 1){
-            findContractByProjectId(this.projectForm.id).then((res)=>{
-              this.contractList = res.data.data;
-            })
-          }
+          this.getContractList();
+          this.getRoleList();
+          this.getUserByCondition();
+          this.getUserByName();
         }
       }
     },
@@ -165,6 +209,14 @@
        }
      },
       beforeLeave(activeName, oldActiveName){
+        if(oldActiveName == '1' && !this.projectForm.id){
+          this.$message({
+            type: "warning",
+            message: "请先保存项目后,再进行项目的分配"
+          });
+          return false;
+        }
+
        if(this.typeChang[oldActiveName]){
          this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
           confirmButtonText: '确定',
@@ -205,7 +257,7 @@
         });
         this.$router.go(-1);
      },
-     async saveNext(){
+     async saveNext(type){
         if(this.activeType == '1'){
           let res = await this.saveProject();
           this.projectForm.id = res.data.data.id;
@@ -216,13 +268,15 @@
         });
         this.typeChang[this.activeType] = false;
         let num = Number(this.activeType);
-        if(num >2){
-          this.activeType = '1';
-        }else{
-          num++;
-          this.activeType = num.toString();
+        if(type == 'n'){
+            num++;
+        }else if(type == 'p'){
+            num--;
         }
+        
+        this.activeType = num.toString();
      },
+
      saveProject(){
        return new Promise((resolve, reject) => {
          this.$refs['projectForm'].validate((valid) => {
@@ -235,6 +289,84 @@
        })
      },
 
+     addUserToProject(){
+       if(!this.userId){
+         this.$message({
+            type: "warning",
+            message: "请先选择用户再进行添加"
+          });
+         return;
+       }
+       if(!this.rId){
+         this.$message({
+            type: "warning",
+            message: "请先选择维护人员角色再进行添加"
+          });
+         return;
+       }
+       let list = [{
+         projectId:this.projectForm.id,
+         contractId:this.cId?this.cId:undefined,
+         userId:this.userId,
+         roleId:this.rId
+       }];
+       saveUserInfoByProject(list).then(()=>{
+         this.getUserByCondition();
+       })
+     },
+
+     getUserByCondition(){
+       findUserListByCondition({
+         cId:this.cId,
+         pId:this.projectForm.id,
+         postId:'',
+         rId:this.rId,
+       }).then((res)=>{
+         this.contractUserList = res.data.data;
+       })
+     },
+
+     getUserByName(){
+       findUserByName('').then((res)=>{
+         this.userList = res.data.data;
+       })
+     },
+
+     handleDelete(index,row){
+      this.$confirm('是否将该用户移除出合同段', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        removeUsersByIds(row.id).then(()=>{
+          this.contractUserList.splice(index,1);
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+        })
+      })
+     },
+     handleDeletes(){
+      this.$confirm('是否将所有用户移除出合同段', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        let ids = [];
+        this.contractUserList.forEach((element)=>{
+          ids.push(element.id);
+        })
+        removeUsersByIds(ids.join(',')).then(()=>{
+          this.contractUserList = [];
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+        })
+      })
+     },
+
      getHighwayGradeList(){
         if(this.highwayGradeList.length >1){
           return;
@@ -248,6 +380,25 @@
           this.highwayGradeList = res.data.data;
         })
       },
+
+      getContractList(){
+        if(this.contractList.length < 1){
+          findContractByProjectId(this.projectForm.id).then((res)=>{
+            this.contractList = res.data.data;
+          })
+        }
+      },
+
+      getRoleList(){
+        if(this.roleList.length > 1){
+          return;
+        }
+
+        getRoleTree().then((res)=>{
+          this.roleList = res.data.data
+        })
+      }
+
     }
   };
 </script>