Kaynağa Gözat

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

admin 3 yıl önce
ebeveyn
işleme
392d32a0a3

+ 17 - 6
src/components/tree-tree/main.vue

@@ -19,7 +19,7 @@
     <div class="flex flex-d-c flex-center" style="width:50px;">
       <div><el-button @click="addTree" size="mini" icon="el-icon-arrow-right"></el-button></div>
       <div><el-button @click="delTree" size="mini" icon="el-icon-arrow-left"></el-button></div>
-      
+
     </div>
     <el-card class="box-card flex1">
       <div slot="header" class="clearfix">
@@ -59,7 +59,7 @@ export default {
     }
   },
   computed: {
-    
+
   },
   data(){
     return{
@@ -119,8 +119,8 @@ export default {
         this.$refs.rightTree.remove(node);
         this.$refs.leftTree.setChecked(node.id,false);
       })
-      this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
-      this.leftNum = this.$refs.leftTree.getCheckedKeys().length;
+      this.getRightNum();
+      this.getLeftNum();
 
       this.$emit('onDelTree',delNodes);
     },
@@ -132,10 +132,10 @@ export default {
     checkChange(treeName){
       switch (treeName) {
         case 'leftTree':
-          this.leftNum = this.$refs.leftTree.getCheckedKeys().length;
+          this.getLeftNum();
           break;
         case 'rightTree':
-          this.rightNum = this.$refs.rightTree.getCheckedKeys().length;
+          this.getRightNum();
           break;
       }
     },
@@ -187,6 +187,17 @@ export default {
 
     checkChang(){
       this.$emit('onCheckAll');
+    },
+
+    getLeftNum(){
+      let checkNum = this.$refs.leftTree.getCheckedKeys().length;
+      let halfNum = this.$refs.leftTree.getHalfCheckedKeys().length;
+      this.leftNum = checkNum+halfNum;
+    },
+    getRightNum(){
+      let checkNum = this.$refs.rightTree.getCheckedKeys().length;
+      let halfNum = this.$refs.rightTree.getHalfCheckedKeys().length;
+      this.rightNum = checkNum+halfNum;
     }
   }
 };

+ 147 - 80
src/views/manager/contractinfo/detail.vue

@@ -95,7 +95,7 @@
                         <el-button size="small" type="primary">点击上传</el-button>
                       </el-upload>
                     </template>
-                    
+
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -108,75 +108,71 @@
                 <el-col :span="12">
                 </el-col>
               </el-row>
+              <el-divider></el-divider>
+              <el-row :gutter="20">
+                <el-col :span="12">
+                  <div>组卷归档默认信息</div>
+                    <el-row>
+                      <el-col :span="12">
+                        <el-form-item label="立卷人" prop="filer">
+                          <el-input v-model="contractForm.filer"></el-input>
+                        </el-form-item>
+                      </el-col>
+                      <el-col :span="12">
+                        <el-form-item label="保管期限" prop="storagePeriod">
+                          <el-select v-model="contractForm.storagePeriod" placeholder="请选择" class="w-100p">
+                            <el-option label="10年"  value="10年"></el-option>
+                            <el-option label="30年"  value="30年"></el-option>
+                            <el-option label="永久"  value="永久"></el-option>
+                          </el-select>
+                        </el-form-item>
+                      </el-col>
+                    </el-row>
+                    <el-row>
+                      <el-col :span="12">
+                        <el-form-item label="审核人" prop="reviewer">
+                          <el-input v-model="contractForm.reviewer"></el-input>
+                        </el-form-item>
+                      </el-col>
+                      <el-col :span="12">
+                        <el-form-item label="保管密级" prop="securityLevel">
+                          <el-select v-model="contractForm.securityLevel" placeholder="请选择" class="w-100p">
+                            <el-option label="机密"  value="机密"></el-option>
+                            <el-option label="绝密"  value="绝密"></el-option>
+                            <el-option label="秘密"  value="秘密"></el-option>
+                            <el-option label="公开"  value="公开"></el-option>
+                          </el-select>
+                        </el-form-item>
+                      </el-col>
+                    </el-row>
+                    <el-row>
+                      <el-col :span="12">
+                        <el-form-item label="档案前缀" prop="prefix">
+                          <el-input v-model="contractForm.prefix"></el-input>
+                        </el-form-item>
+                      </el-col>
+                      <el-col :span="12">
+
+                      </el-col>
+                    </el-row>
+                </el-col>
+                <el-col :span="12">
+                  <div>附加信息</div>
+                    <el-form-item label="项目地址" prop="projectPlace">
+                      <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
+                        <el-button slot="append" icon="el-icon-map-location" @click="mapDialogVisible = true"></el-button>
+                      </el-input> -->
+                      <avue-input-map  :params="params" placeholder="请选择地图" v-model="flageData" @change="mapChange"></avue-input-map>
+                    </el-form-item>
+                    <el-form-item label="起始桩号" prop="startStation">
+                      <el-input v-model="contractForm.startStation"></el-input>
+                    </el-form-item>
+                    <el-form-item label="结束桩号" prop="endStation">
+                      <el-input v-model="contractForm.endStation"></el-input>
+                    </el-form-item>
+                </el-col>
+              </el-row>
             </el-form>
-            <el-divider></el-divider>
-            <el-row :gutter="20">
-              <el-col :span="12">
-                <div>组卷归档默认信息</div>
-                <el-form label-width="90px">
-                  <el-row>
-                    <el-col :span="12">
-                      <el-form-item label="立卷人" prop="filer">
-                        <el-input v-model="contractForm.filer"></el-input>
-                      </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                      <el-form-item label="保管期限" prop="storagePeriod">
-                        <el-select v-model="contractForm.storagePeriod" placeholder="请选择" class="w-100p">
-                          <el-option label="10年"  value="10年"></el-option>
-                          <el-option label="30年"  value="30年"></el-option>
-                          <el-option label="永久"  value="永久"></el-option>
-                        </el-select>
-                      </el-form-item>
-                    </el-col>
-                  </el-row>
-                  <el-row>
-                    <el-col :span="12">
-                      <el-form-item label="审核人" prop="reviewer">
-                        <el-input v-model="contractForm.reviewer"></el-input>
-                      </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                      <el-form-item label="保管密级" prop="securityLevel">
-                        <el-select v-model="contractForm.securityLevel" placeholder="请选择" class="w-100p">
-                          <el-option label="机密"  value="机密"></el-option>
-                          <el-option label="绝密"  value="绝密"></el-option>
-                          <el-option label="秘密"  value="秘密"></el-option>
-                          <el-option label="公开"  value="公开"></el-option>
-                        </el-select>
-                      </el-form-item>
-                    </el-col>
-                  </el-row>
-                  <el-row>
-                    <el-col :span="12">
-                      <el-form-item label="档案前缀" prop="prefix">
-                        <el-input v-model="contractForm.prefix"></el-input>
-                      </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                      
-                    </el-col>
-                  </el-row>
-                </el-form>
-              </el-col>
-              <el-col :span="12">
-                <div>附加信息</div>
-                <el-form label-width="90px">
-                  <el-form-item label="项目地址" prop="projectPlace">
-                    <!-- <el-input v-model="contractForm.projectPlace" placeholder="点击后面地图选取地址">
-                      <el-button slot="append" icon="el-icon-map-location" @click="mapDialogVisible = true"></el-button>
-                    </el-input> -->
-                    <avue-input-map  :params="params" placeholder="请选择地图" v-model="flageData" ></avue-input-map>
-                  </el-form-item>
-                  <el-form-item label="起始桩号" prop="startStation">
-                    <el-input v-model="contractForm.startStation"></el-input>
-                  </el-form-item>
-                  <el-form-item label="结束桩号" prop="endStation">
-                    <el-input v-model="contractForm.endStation"></el-input>
-                  </el-form-item>
-                </el-form>
-              </el-col>
-            </el-row>
           </div>
         </el-tab-pane>
         <el-tab-pane label="分配WBS" name="2">
@@ -240,9 +236,9 @@
       <div class="flex jc-sb">
         <div></div>
         <div>
-          <el-button type="success" size="medium" @click="saveQuit">保存并退出</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>
+          <el-button type="success" size="medium" :loading="btnLoad" @click="saveQuit">保存并退出</el-button>
+          <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
+          <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
         </div>
       </div>
     </div>
@@ -270,6 +266,30 @@
       treeTree
     },
     data() {
+      var checkPlace = (rule, value, callback) => {
+        if (this.flageData && this.flageData.length >2 && this.flageData[2]) {
+          callback();
+        } else {
+          callback(new Error('请选取项目地址'));
+        }
+      }
+      var checkDate = (rule, value, callback) => {
+        if (value && this.contractForm.planStartTime) {
+          if(Date.parse(value) < Date.parse(this.contractForm.planStartTime)){
+            callback(new Error('计划完工日期不能小于开工日期'));
+          }
+        }
+        callback();
+      };
+      var checkDate2 = (rule, value, callback) => {
+        if (value && this.contractForm.actualStartTime) {
+          if(Date.parse(value) < Date.parse(this.contractForm.actualStartTime)){
+            callback(new Error('实际完工日期不能小于开工日期'));
+          }
+        }
+        callback();
+      };
+
       return {
         activeType:'1',
         typeChang:{
@@ -277,6 +297,7 @@
           2:false,
           3:false,
         },
+        btnLoad:false,
 
         pid:'',
         cid:'',
@@ -287,11 +308,43 @@
         headers:{},
         isBackShow:false,
 
-        contractForm:{},
+        contractForm:{
+          contractAmount:0
+        },
         contractRules:{
           contractName: [
             { required: true, message: '请输入合同段名称', trigger: 'blur' },
           ],
+          contractType: [
+            { required: true, message: '请选择合同段类型', trigger: 'change' }
+          ],
+          contractNumber: [
+            { required: true, message: '请输入合同段编号', trigger: 'blur' },
+          ],
+          contractorUnitName: [
+            { required: true, message: '请输入业主单位名称', trigger: 'blur' },
+          ],
+          constructionUnitName: [
+            { required: true, message: '请输入施工单位名称', trigger: 'blur' },
+          ],
+          supervisionUnitName: [
+            { required: true, message: '请输入监理单位名称', trigger: 'blur' },
+          ],
+          startStation: [
+            { required: true, message: '请输入起始桩号', trigger: 'blur' },
+          ],
+          endStation: [
+            { required: true, message: '请输入结束桩号', trigger: 'blur' },
+          ],
+          projectPlace: [
+            { required: true,validator: checkPlace, trigger: 'blur' },
+          ],
+          planEndTime:[
+            {validator: checkDate,trigger: 'blur'},
+          ],
+          actualEndTime:[
+            {validator: checkDate2,trigger: 'blur'},
+          ]
         },
 
         mapDialogVisible:false,
@@ -379,7 +432,7 @@
         }
 
         this.getContractTypeList();
-        this.setHeaders(); 
+        this.setHeaders();
       },
       beforeLeave(activeName, oldActiveName){
         return new Promise((resolve,reject)=>{
@@ -458,6 +511,7 @@
       },
 
       async saveQuit(){
+        this.btnLoad = true;
         if(this.activeType == '1'){
           await this.savecontract();
         }else if(this.activeType == '2'){
@@ -467,15 +521,23 @@
           type: "success",
           message: "保存成功!"
         });
+        this.btnLoad = false;
         this.$router.go(-1);
       },
       async saveNext(type){
-        if(this.activeType == '1'){
-          let res = await this.savecontract();
-          this.contractForm.id = res.data.data.id;
-        }else if(this.activeType == '2'){
-          await this.saveWbsTree();
+        this.btnLoad = true;
+        try {
+          if(this.activeType == '1'){
+            let res = await this.savecontract();
+            this.contractForm.id = res.data.data.id;
+          }else if(this.activeType == '2'){
+            await this.saveWbsTree();
+          }
+        } catch (error) {
+          this.btnLoad = false;
+          return;
         }
+
         this.$message({
           type: "success",
           message: "保存成功!"
@@ -489,6 +551,7 @@
         }
 
         this.activeType = num.toString();
+        this.btnLoad = false;
       },
 
       savecontract(){
@@ -631,7 +694,7 @@
             message: "成功复制在剪贴板!"
           });
         })
- 
+
       },
 
       resetPassword(row){
@@ -729,6 +792,10 @@
 
      treeChang(){
       this.typeChang[2] = true;
+    },
+
+    mapChange(){
+      this.$refs['contractForm'].validateField('projectPlace');
     }
 
     }

+ 88 - 12
src/views/manager/projectinfo/detail.vue

@@ -61,14 +61,14 @@
         <el-tab-pane label="分配WBS模版" name="2">
           <div>
             <div class="text-align-c">
-              <el-radio-group v-model="templateType">
+              <el-radio-group v-model="templateType" @change="templateTypeChange" :disabled="selected">
                 <el-radio :label="2">试验</el-radio>
                 <el-radio :label="1">质检</el-radio>
               </el-radio-group>
             </div>
             <div class="text-align-c mg-t-20">
               <span class="mg-r-20">选择WBS</span>
-              <el-select v-model="wbsId" @change="wbsChange" placeholder="请选择WBS" style="width:500px;">
+              <el-select v-model="wbsId" @change="wbsChange" :disabled="selected" placeholder="请选择WBS" style="width:500px;">
                 <el-option-group
                   v-for="group in treeList"
                   :key="group.label"
@@ -136,9 +136,9 @@
       <div class="flex jc-sb">
         <div></div>
         <div>
-          <el-button type="success" size="medium" @click="saveQuit">保存并退出</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>
+          <el-button type="success" size="medium" :loading="btnLoad" @click="saveQuit">保存并退出</el-button>
+          <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 1" @click="saveNext('p')">保存并返回上一步</el-button>
+          <el-button type="info" size="medium" :loading="btnLoad" v-if="activeType != 3" @click="saveNext('n')">保存并进入下一步</el-button>
         </div>
       </div>
     </div>
@@ -160,6 +160,23 @@
       treeTree
     },
     data() {
+      var checkDate = (rule, value, callback) => {
+        if (value && this.projectForm.planStartTime) {
+          if(Date.parse(value) < Date.parse(this.projectForm.planStartTime)){
+            callback(new Error('计划完工日期不能小于开工日期'));
+          }
+        }
+        callback();
+      };
+      var checkDate2 = (rule, value, callback) => {
+        if (value && this.projectForm.actualStartTime) {
+          if(Date.parse(value) < Date.parse(this.projectForm.actualStartTime)){
+            callback(new Error('实际完工日期不能小于开工日期'));
+          }
+        }
+        callback();
+      };
+
       return {
         activeType:'1',
         typeChang:{
@@ -167,12 +184,15 @@
           2:false,
           3:false,
         },
+        btnLoad:false,
 
         id:'',
         highwayGradeList:[],
         radioType:'总里程',
 
-        projectForm:{},
+        projectForm:{
+          estimatedAmount:0
+        },
         projectRules:{
           projectName: [
             { required: true, message: '请输入项目名称', trigger: 'blur' },
@@ -180,6 +200,12 @@
           projectAlias: [
             { required: true, message: '请输入项目别名', trigger: 'blur' },
           ],
+          planEndTime:[
+            {validator: checkDate,trigger: 'blur'}
+          ],
+          actualEndTime:[
+            {validator: checkDate2,trigger: 'blur'}
+          ]
         },
 
         contractList:[],
@@ -198,6 +224,7 @@
         templateType:1,
         treeList:[],
         wbsId:'',
+        selected:false,
         leftTreeData:[],
       }
     },
@@ -222,6 +249,7 @@
           if(refId && refId>0){
             //有引用id,回显
             this.wbsId = refId;
+            this.selected = true;
             let projectTree = await findProjectTree(this.projectForm.id,refId)
             if(Array.isArray(projectTree.data.data)){
               this.templateType = projectTree.data.data[0].wbsType;
@@ -234,7 +262,7 @@
               this.$refs.treetotree.setRightTree(projectTree.data.data);
             }
           }
-          
+
           this.getTreeList();
         }
       }
@@ -316,6 +344,7 @@
       },
 
      async saveQuit(){
+       this.btnLoad = true;
        if(this.activeType == '1'){
           await this.saveProject();
         }else if(this.activeType == '2'){
@@ -325,9 +354,11 @@
           type: "success",
           message: "保存成功!"
         });
+        this.btnLoad = false;
         this.$router.go(-1);
      },
      async saveNext(type){
+        this.btnLoad = true;
         if(this.activeType == '1'){
           let res = await this.saveProject();
           this.projectForm.id = res.data.data.id;
@@ -345,8 +376,9 @@
         }else if(type == 'p'){
             num--;
         }
-        
+
         this.activeType = num.toString();
+        this.btnLoad = false;
      },
 
      saveProject(){
@@ -369,6 +401,18 @@
         projectId:this.projectForm.id,
         wbsTreeIds:ids
       }
+      if(this.wbsId.toString().indexOf(',') >= 0){
+          //私有库
+          obj.referenceType =  "private";
+          let ids = this.wbsId.toString().split(',');
+          obj.wbsId = ids[0];
+          obj.referencePrivateWbsProjectId = ids[1];
+          // obj.primaryKeyId = this.leftTreeData[0].primaryKeyId;
+        }else{
+          //公有库
+          obj.referenceType =  "public";
+        }
+      
       return submitWbsTreeInProject(obj);
      },
 
@@ -457,9 +501,9 @@
         getDictionary({
           code:'highway_grade'
         }).then((res)=>{
-          res.data.data.forEach(element => {
-            element.dictKey = Number(element.dictKey)
-          });
+          // res.data.data.forEach(element => {
+          //   element.dictKey = Number(element.dictKey)
+          // });
           this.highwayGradeList = res.data.data;
         })
       },
@@ -544,6 +588,38 @@
 
       treeChang(){
         this.typeChang[2] = true;
+      },
+
+      templateTypeChange(){
+        findWbsTreeList(this.templateType).then((res)=>{
+          let arr = [{
+            label:'公有库',
+            options:[],
+          },
+          {
+            label:'私有库',
+            options:[],
+          }];
+          let data = res.data.data;
+          if(data.wbsInfos && data.wbsInfos.length){
+            data.wbsInfos.forEach((element)=>{
+              element.label = element.wbsName;
+              element.value = element.id;
+            })
+            arr[0].options = data.wbsInfos;
+          }
+          if(data.wbsTreePrivates && data.wbsTreePrivates.length){
+            data.wbsTreePrivates.forEach((element)=>{
+              element.label = element.projectName;
+              element.value = element.wbsId +','+ element.projectId;
+            })
+            arr[1].options = data.wbsTreePrivates;
+          }
+          this.treeList = arr;
+        })
+
+        this.wbsId = '';
+        this.leftTreeData = [];
       }
 
     }
@@ -551,5 +627,5 @@
 </script>
 
 <style scoped lang="scss">
-  
+
 </style>

+ 1 - 1
src/views/manager/projectinfo/tree.vue

@@ -1541,7 +1541,7 @@ export default {
     },
 
     updateTreeNewNode () {
-      getLazytree(this.id, this.nodeDetail.parentId).then((res) => {
+      getLazytree(this.id, this.nodeDetail.parentId,this.userInfo.tenant_id, this.projectid).then((res) => {
         this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId, res.data.data)
       })
     },

+ 4 - 0
src/views/manager/wbsinfo/edit.vue

@@ -751,6 +751,10 @@
 
       updateTreeNewNode(){
         getLazytree(this.id ,this.nodeDetail.parentId).then((res)=>{
+          let node = this.$refs.tree.getNode(this.nodeDetail.parentId);
+          node.isLeaf = false;
+          node.isLeafByUser = false;
+          //console.log(node)
           this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId,res.data.data)
         })
       },