فهرست منبع

Merge branch 'master' of http://47.110.251.215:3000/web/saber into master

admin 3 سال پیش
والد
کامیت
5d6cd0c60e

+ 21 - 3
src/api/manager/wbsformelement.js

@@ -22,12 +22,14 @@ export const getDetail = (id) => {
   })
 }
 
-export const remove = (ids) => {
+export const remove = (ids,initTableName,eKey) => {
   return request({
     url: '/api/blade-manager/wbsFormElement/remove',
     method: 'post',
     params: {
       ids,
+      initTableName,
+      eKey
     }
   })
 }
@@ -54,11 +56,27 @@ export const saveElement = (row) => {
     data: row
   })
 }
-export const updateBatchElements = (list) => {
+
+export const updateBatchElements = (list,initTableName) => {
   return request({
-    url: '/api/blade-manager/wbsTree/updateBatchElements',
+    url: '/api/blade-manager/wbsTree/updateBatchElements?initTableName='+initTableName,
     method: 'post',
     data: list
   })
 }
 
+export const getTemplate = () => {
+  return request({
+    url: '/api/blade-manager/wbsFormElement/export-template',
+    method: 'get',
+    responseType:'arraybuffer'
+  })
+}
+
+export const importWbsElement = (formData) => {
+  return request({
+    url: '/api/blade-manager/wbsFormElement/import-wbsElement',
+    method: 'post',
+    data: formData
+  })
+}

+ 1 - 1
src/api/manager/wbsinfo.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
   return request({
-    url: '/api/blade-manager/wbsInfo/list',
+    url: '/api/blade-manager/wbsInfo/page',
     method: 'get',
     params: {
       ...params,

+ 4 - 4
src/styles/icon/index.scss

@@ -1,5 +1,5 @@
-@import 'icon';
-@import 'lib';
-@import 'cicon';
+//@import 'icon';
+//@import 'lib';
+//@import 'cicon';
 @import "hcicon";
-@import "HIcon";
+//@import "HIcon";

+ 40 - 24
src/views/manager/contractinfo/detail.vue

@@ -382,33 +382,49 @@
         this.setHeaders(); 
       },
       beforeLeave(activeName, oldActiveName){
-        if(oldActiveName == '1' && !this.contractForm.id){
-          this.$message({
-            type: "warning",
-            message: "请先保存合同段后,再进行合同段的分配"
-          });
-          return false;
-        }
+        return new Promise((resolve,reject)=>{
+          if(oldActiveName == '1' && !this.contractForm.id){
+            this.$message({
+              type: "warning",
+              message: "请先保存合同段后,再进行合同段的分配"
+            });
+            reject();
+          }
 
-       if(this.typeChang[oldActiveName]){
-         this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '不用',
-          type: 'warning'
-        }).then(() => {
-          switch (oldActiveName) {
-            case '1':
-              this.savecontract().then((res)=>{
-                this.contractForm.id = res.data.data.id;
-                this.$message({
-                  type: "success",
-                  message: "保存成功!"
-                });
-              });
-              break;
+          if(this.typeChang[oldActiveName]){
+            this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
+              confirmButtonText: '确定',
+              cancelButtonText: '不用',
+              type: 'warning'
+            }).then(() => {
+              switch (oldActiveName) {
+                case '1':
+                  this.savecontract().then((res)=>{
+                    this.contractForm.id = res.data.data.id;
+                    resolve();
+                    this.$message({
+                      type: "success",
+                      message: "保存成功!"
+                    });
+                  });
+                  break;
+                case '2':
+                  this.saveWbsTree().then(()=>{
+                    resolve();
+                    this.$message({
+                      type: "success",
+                      message: "保存成功!"
+                    });
+                  })
+                  break;
+              }
+            }).catch(()=>{
+              reject();
+            })
+          }else{
+            resolve();
           }
         })
-       }
       },
 
       getProjectDeatil(){

+ 42 - 26
src/views/manager/projectinfo/detail.vue

@@ -99,7 +99,7 @@
             <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>
+              <avue-input-tree :check-strictly="true" v-model="rId" placeholder="请选择" type="tree" :dic="roleList" :props="treeProps" @change="getUserByCondition"></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> -->
@@ -120,7 +120,7 @@
               </el-table>
             </div>
             <div class="flex jc-al-c mg-t-20">
-              <span>添加系内部人员</span>
+              <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>
@@ -261,33 +261,49 @@
        }
      },
       beforeLeave(activeName, oldActiveName){
-        if(oldActiveName == '1' && !this.projectForm.id){
-          this.$message({
-            type: "warning",
-            message: "请先保存项目后,再进行项目的分配"
-          });
-          return false;
-        }
+        return new Promise((resolve,reject)=>{
+          if(oldActiveName == '1' && !this.projectForm.id){
+            this.$message({
+              type: "warning",
+              message: "请先保存项目后,再进行项目的分配"
+            });
+            reject();
+          }
 
-       if(this.typeChang[oldActiveName]){
-         this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '不用',
-          type: 'warning'
-        }).then(() => {
-          switch (oldActiveName) {
-            case '1':
-              this.saveProject().then((res)=>{
-                this.projectForm.id = res.data.data.id;
-                this.$message({
-                  type: "success",
-                  message: "保存成功!"
-                });
-              });
-              break;
+          if(this.typeChang[oldActiveName]){
+            this.$confirm('检测到新编辑内容, 是否保存?', '提示', {
+              confirmButtonText: '确定',
+              cancelButtonText: '不用',
+              type: 'warning'
+            }).then(() => {
+              switch (oldActiveName) {
+                case '1':
+                  this.saveProject().then((res)=>{
+                    this.projectForm.id = res.data.data.id;
+                    resolve();
+                    this.$message({
+                      type: "success",
+                      message: "保存成功!"
+                    });
+                  });
+                  break;
+                case '2':
+                  this.saveWbsTree().then(()=>{
+                    resolve();
+                    this.$message({
+                      type: "success",
+                      message: "保存成功!"
+                    });
+                  })
+                  break;
+              }
+            }).catch(()=>{
+              reject();
+            })
+          }else{
+              resolve();
           }
         })
-       }
      },
 
      getProjectDeatil(){

+ 2 - 2
src/views/manager/wbsinfo.vue

@@ -106,11 +106,11 @@
               dicData: [
                 {
                   label: "否",
-                  value: 1
+                  value: 0
                 },
                 {
                   label: "是",
-                  value: 2
+                  value: 1
                 }
               ],
             },

+ 114 - 22
src/views/manager/wbsinfo/edit.vue

@@ -16,10 +16,11 @@
                 :props="defaultProps" :expand-on-click-node="false"
                 highlight-current node-key="id"
                 ref="tree">
-                <span class="custom-tree-node" slot-scope="{ node, data }">
+                <span class="custom-tree-node" :class="data.moreShow?'show':''"  slot-scope="{ node, data }">
+                  <!--@mouseover="mouseover(data)" @mouseleave="mouseout(data)"-->
                   <span>
                     {{ node.label }}
-                    <el-dropdown @click="command=>{setLeftType(command,data)}">
+                    <el-dropdown @click="command=>{setLeftType(command,data)}" @visible-change="visiblechange($event,data)">
                       <el-button
                         type="text" icon="el-icon-more" class="normal-black">
                       </el-button>
@@ -43,10 +44,10 @@
                 highlight-current node-key="id"
                 :filter-node-method="filterNode"
                 ref="treeall">
-                <span class="custom-tree-node" slot-scope="{ node, data }">
+                <span class="custom-tree-node" slot-scope="{ node, data }" :class="data.moreShow?'show':''">
                   <span>
                     {{ node.label }}
-                    <el-dropdown @click="command=>{setLeftType(command,data)}">
+                    <el-dropdown @click="command=>{setLeftType(command,data)}" @visible-change="visiblechange($event,data)">
                       <el-button
                         type="text" icon="el-icon-more" class="normal-black">
                       </el-button>
@@ -68,7 +69,7 @@
       </div>
   </el-col>
   <el-col :span="14">
-      <template v-if="leftType==2 || leftType==1">
+      <template v-if="leftType==5">
         <p>节点信息</p>
         <el-table :data="tableData" border style="width: 100%">
           <el-table-column align="center" prop="deptName" label="当前节点" ></el-table-column>
@@ -191,7 +192,7 @@
         <div></div>
         <div>
           <el-link type="primary" @click="importVisible = true">快捷导入</el-link>
-          <el-link type="primary" class="mg-l-20">下载导入模版</el-link>
+          <el-link type="primary" class="mg-l-20" @click="downloadTmp">下载导入模版</el-link>
         </div>
       </div>
       <div class="border-grey">
@@ -212,7 +213,7 @@
             </el-table-column>
             <el-table-column align="center" prop="eLength" label="长度" width="120">
               <template slot-scope="scope">
-                <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容"></el-input>
+                <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容" :disabled="scope.row.eType == 4" ></el-input>
               </template>
             </el-table-column>
             <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
@@ -250,9 +251,10 @@
     </el-dialog>
 
     <el-dialog title="模版导入" :visible.sync="importVisible" width="50%" append-to-body :close-on-click-modal="false">
-      <p>提示:必须按照系统要求的模版格式上传,否则系统识别无效  <el-link type="primary">下载导入模版</el-link></p>
+      <p>提示:必须按照系统要求的模版格式上传,否则系统识别无效  <el-link type="primary" @click="downloadTmp">下载导入模版</el-link></p>
       <div>
-        <el-button size="small" type="primary">本地上传</el-button>
+        <el-button size="small" type="primary" @click="fileClick2">本地上传</el-button>
+        <input @change="tmpImport" type="file" hidden ref="file2" accept=".xls, .xlsx">
       </div>
       <el-table :data="tempList" border style="width: 100%" >
         <el-table-column align="center" prop="eName" label="元素名称" >
@@ -290,7 +292,7 @@
           </el-table-column>
           <el-table-column align="center" prop="eLength" label="长度" width="120">
             <template slot-scope="scope">
-              <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容"></el-input>
+              <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容" :disabled="scope.row.eType == 4"></el-input>
             </template>
           </el-table-column>
           <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
@@ -482,7 +484,8 @@
   import {getLazytree,getDetail,update,selectByNodeTable,getAlltree,
             saveFormAndElement,selectFormElements,removeTableById,
             importWbsTree} from "@/api/manager/wbstree";
-  import {saveElement,remove as removeElement,updateBatchElements} from "@/api/manager/wbsformelement";
+  import {saveElement,remove as removeElement,updateBatchElements,getTemplate,
+          importWbsElement} from "@/api/manager/wbsformelement";
   import {getList as getAttchFromOriginalName} from "@/api/resource/attach";
   import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
@@ -493,6 +496,7 @@
         filterText:'',
         treeData:[],
         treeLoad:false,
+        menuShow:false,
         defaultProps: {
           children: 'children',
           label: 'title',
@@ -500,11 +504,12 @@
             return !data.hasChildren;
           }
         },
-        leftType:2,
+        leftType:5,
         curTreeData:{},
         tableData:[],
         nodeDetail:{},
         formData:[],
+        editType:1,
 
         dialogVisible:false,
         deptCategorylist:[],
@@ -543,6 +548,7 @@
         curEleTable:{},
         editEleVisible:false,
         editEleList:[],
+        eleReg:/(≥|≤|±|【】)?([^≥≤±【】]*)/,
 
         editEleFormulaVisible:false,
         formulaInput:'',
@@ -617,9 +623,9 @@
       saveNode(){
         this.$refs['nodeDetail'].validate((valid) => {
           if (valid) {
-            if(this.leftType == 1){
+            if(this.editType == 1){
               this.addNode();
-            }else if(this.leftType == 2){
+            }else if(this.editType == 2){
               this.updateNode();
             }
           } else {
@@ -653,13 +659,16 @@
       },
 
       setLeftType(type,data,node){
-        this.leftType = type;
+        if(type == 4 || type == 5){
+          this.leftType = type;
+        }
         this.curTreeData = data;
         this.$refs.tree.setCurrentKey(data.id);
 
-        if(this.leftType == 1 || this.leftType == 2){
+        if(type == 1 || type == 2){
           this.getMajorDataTypeList();
           this.dialogVisible = true;
+          this.editType = type;
         }
 
         getDetail(data.id).then((res)=>{
@@ -669,7 +678,7 @@
           }
           res.data.data.parentName = parentName;
           this.tableData = [res.data.data];
-          if(this.leftType == 1){
+          if(type == 1){
             this.nodeDetail = {
               parentId:res.data.data.id,
               parentName:parentName
@@ -720,6 +729,9 @@
             this.eleForm.parentId = this.nodeDetail.id;
             this.eleForm.elementList.forEach((element)=>{
               element.eAllowDeviation = (element.allow?element.allow:'') + (element.deviation?element.deviation:'');
+              if(element.eType == 4){
+                element.eLength = 0;
+              }
             })
             saveFormAndElement(this.eleForm).then(()=>{
               //console.log(res)
@@ -761,9 +773,8 @@
       handleEdit(index,row){
         this.curEleTable = row;
         selectFormElements(this.curEleTable.id).then((res)=>{
-          let reg = /(≥|≤|±|【】)?([^≥≤±【】]*)/;
           res.data.data.forEach((element)=>{
-            reg.exec(element.eAllowDeviation);
+            this.eleReg.exec(element.eAllowDeviation);
             // console.log(RegExp.$1)
             // console.log(RegExp.$2)
             element.allow = RegExp.$1?RegExp.$1:'';
@@ -802,9 +813,14 @@
       saveNewEle(row){
         row.eAllowDeviation = (row.allow?row.allow:'') + (row.deviation?row.deviation:'');
         row.fId = this.curEleTable.id;
+        row.initTableName = this.curEleTable.initTableName;
+        if(row.eType == 4){
+          row.eLength = 0;
+        }
         saveElement(row).then((res)=>{
           if(res.data.data){
-            this.$set(row,'id',res.data.data);
+            this.$set(row,'id',res.data.data.id);
+            this.$set(row,'ekey',res.data.data.ekey);
             this.$message({
               type: "success",
               message: "保存成功!"
@@ -821,7 +837,7 @@
             confirmButtonText: '删除',
             cancelButtonText: '取消'
           }).then(() => {
-            removeElement(row.id).then(()=>{
+            removeElement(row.id,this.curEleTable.initTableName,row.ekey).then(()=>{
               list.splice(index,1);
             })
           })
@@ -840,7 +856,13 @@
           }
         }
         if(this.editEleList.length > 0){
-          updateBatchElements(this.editEleList).then(()=>{
+          this.editEleList.forEach((element)=>{
+            element.eAllowDeviation = (element.allow?element.allow:'') + (element.deviation?element.deviation:'');
+            if(element.eType == 4){
+              element.eLength = 0;
+            }
+          })
+          updateBatchElements(this.editEleList,this.curEleTable.initTableName).then(()=>{
             this.editEleVisible = false;
             this.updateNodeTable();
             this.$message({
@@ -917,6 +939,7 @@
           let node = this.$refs.tree.getNode(this.curTreeData.id);
           node.isLeaf = false;
           this.importTemplateVisible = false;
+          this.upFile = null;
         }).finally(()=>{
           this.importLoading = false;
         })
@@ -964,6 +987,60 @@
         row.isEdit = false;
       },
 
+      downloadTmp(){
+        getTemplate().then((res)=>{
+          //console.log(res)
+          let blob = new Blob([res.data], {
+                type: 'application/vnd.ms-excel'
+            });
+            //console.log(blob)
+            let filename = Date.parse(new Date()) + '.xls';
+            if (window.navigator.msSaveOrOpenBlob) {
+                // 兼容IE10
+                window.navigator.msSaveBlob(blob, filename);
+            } else {
+                //  兼容chrome/firefox
+                let aTag = document.createElement('a');
+                aTag.download = Date.parse(new Date()) + '.xls';
+                aTag.href = window.URL.createObjectURL(blob);
+                aTag.click();
+                URL.revokeObjectURL(aTag.href);
+            }
+        })
+      },
+
+      fileClick2(){
+        this.$refs.file2.click();
+      },
+      tmpImport(e){
+        const file = e.target.files[0];
+        const formData = new FormData();
+        formData.append('file', file);
+        //console.log(file.name)
+        importWbsElement(formData).then((res)=>{
+          res.data.data.forEach((element)=>{
+            element.eName = element.elementName;
+            element.eLength = element.elementLength;
+            element.eType = Number(element.elementType);
+            element.eAllowDeviation = element.elementAllowDeviation;
+            element.eInspectionMethod = element.elementInspectionMethod;
+            this.eleReg.exec(element.eAllowDeviation);
+            // console.log(RegExp.$1)
+            // console.log(RegExp.$2)
+            element.allow = RegExp.$1?RegExp.$1:'';
+            element.deviation = RegExp.$2?RegExp.$2:'';
+          })
+          this.eleForm.elementList = res.data.data;
+          this.importVisible = false;
+        }).finally(()=>{
+          e.target.value='';
+        })
+      },
+
+      visiblechange(value,data){
+        this.$set(data, 'moreShow', value)
+      },
+
       getDeptCategorylist(){
         if(this.deptCategorylist.length >1){
           return;
@@ -1090,4 +1167,19 @@
     top: 10px;
     font-size: 20px;
   }
+  .custom-tree-node {
+    .normal-black {
+        display: none;
+      }
+    &:hover {
+      .normal-black {
+        display: block;
+      }
+    }
+    &.show .normal-black{
+      display: block;
+    }
+    
+  }
+  
 </style>