Browse Source

创建合同段

gangyj 3 years ago
parent
commit
ecda86b7ad

+ 19 - 1
src/api/manager/contractinfo.js

@@ -15,4 +15,22 @@ export const findContractByProjectId = (pid) => {
       pid
     }
   })
-}
+}
+export const getContractInfo = (id) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+export const delFileFromUrl = (url) => {
+  return request({
+    url: '/api/blade-manager/contractInfo/deleteFile',
+    method: 'get',
+    params: {
+      url
+    }
+  })
+}

+ 11 - 1
src/api/manager/projectinfo.js

@@ -18,4 +18,14 @@ export const getProjectList = (current, size, params) => {
       size,
     }
   })
-}
+}
+
+export const getProjectDeatil = (id) => {
+  return request({
+    url: '/api/blade-manager/projectInfo/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}

+ 16 - 1
src/router/views/index.js

@@ -116,4 +116,19 @@ export default [{
     component: () =>
       import( /* webpackChunkName: "views" */ '@/views/manager/wbsinfo/edit')
   }]
-}]
+},{
+  path: '/contract',
+  component: Layout,
+  redirect: '/contract/detail',
+  children: [{
+    path: 'detail',
+    name: '创建合同段',
+    meta: {
+      i18n: 'edit'
+    },
+    component: () =>
+      import( /* webpackChunkName: "views" */ '@/views/manager/contractinfo/detail')
+  }]
+}
+
+]

+ 354 - 0
src/views/manager/contractinfo/detail.vue

@@ -0,0 +1,354 @@
+<template>
+  <basic-container>
+    <div>
+      <el-tabs v-model="activeType" :before-leave="beforeLeave">
+        <el-tab-pane label="合同段信息" name="1">
+          <div>
+            <el-form :model="contractForm" :rules="contractRules" ref="contractForm" label-width="120px">
+              <el-form-item label="项目名称">
+                <el-input v-model="projectInfo.projectName" disabled></el-input>
+              </el-form-item>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="合同段类型" prop="contractType">
+                    <el-select v-model="contractForm.contractType" placeholder="请选择" class="w-100p">
+                      <el-option v-for="item in contractTypeList" :key="item.id" :label="item.dictValue"  :value="item.dictKey"></el-option>
+                    </el-select>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="合同段编号" prop="contractNumber">
+                    <el-input v-model="contractForm.contractNumber"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="合同段名称" prop="contractName">
+                    <el-input v-model="contractForm.contractName"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="参与方进场日期" prop="contractorJoinTime">
+                    <el-date-picker  v-model="contractForm.contractorJoinTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss"  placeholder="选择日期"></el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="计划开工日期" prop="planStartTime">
+                    <el-date-picker  v-model="contractForm.planStartTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="计划完工日期" prop="planEndTime">
+                    <el-date-picker  v-model="contractForm.planEndTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="实际开工日期" prop="actualStartTime">
+                    <el-date-picker  v-model="contractForm.actualStartTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="实际完工日期" prop="actualEndTime">
+                    <el-date-picker  v-model="contractForm.actualEndTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="业主单位名称" prop="contractorUnitName">
+                    <el-input v-model="contractForm.contractorUnitName"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="合同金额" prop="contractAmount">
+                    <el-input v-model="contractForm.contractAmount">
+                      <template slot="append">万元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="施工单位名称" prop="constructionUnitName">
+                    <el-input v-model="contractForm.constructionUnitName"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="上传开工令" prop="startFileUrl">
+                    <template v-if="isBackShow">
+                      <el-link type="primary" @click="downloadFile">开工令</el-link>
+                      <el-button @click="delFile" class="mg-l-10" style="color:red" type="text" icon="el-icon-circle-close"></el-button>
+                    </template>
+                    <template v-else>
+                      <el-upload
+                        action="/api/blade-resource/oss/endpoint/put-file-attach"
+                        :on-remove="handleRemove"
+                        :limit="1" :headers=headers
+                        :on-exceed="handleExceed"
+                        :on-success="handleSuccess"
+                        :file-list="fileList">
+                        <el-button size="small" type="primary">点击上传</el-button>
+                      </el-upload>
+                    </template>
+                    
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="监理单位名称" prop="supervisionUnitName">
+                    <el-input v-model="contractForm.supervisionUnitName"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                </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"></el-button>
+                    </el-input>
+                  </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">
+          <div>
+            
+          </div>
+        </el-tab-pane>
+        <el-tab-pane label="分配项目人员" name="3">
+          <div>
+            
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+
+      <div class="flex jc-sb">
+        <div></div>
+        <div>
+          <el-button type="success" size="medium" @click="saveQuit">保存并退出</el-button>
+          <el-button type="info" size="medium" @click="saveNext">保存并进入下一步</el-button>
+        </div>
+      </div>
+    </div>
+  </basic-container>
+</template>
+
+<script>
+  import {getProjectDeatil} from "@/api/manager/projectinfo";
+  import {submitContractInfo,getContractInfo,delFileFromUrl} from "@/api/manager/contractinfo";
+  import {getDictionary} from "@/api/system/dict";
+  import {remove as removeFile} from "@/api/resource/attach";
+  import website from '@/config/website';
+  import {Base64} from 'js-base64';
+  import {getToken} from '@/util/auth';
+  import {mapGetters} from "vuex";
+  export default {
+    data() {
+      return {
+        activeType:'1',
+
+        pid:'',
+        cid:'',
+        projectInfo:{},
+
+        contractTypeList:[],
+        fileList:[],
+        headers:{},
+        isBackShow:false,
+
+        contractForm:{},
+        contractRules:{
+          contractName: [
+            { required: true, message: '请输入合同段名称', trigger: 'blur' },
+          ],
+        },
+      }
+    },
+    computed: {
+      ...mapGetters(["userInfo"]),
+    },
+    created() {
+      this.init();
+      //console.log(this.userInfo)
+    },
+    methods: {
+      init(){
+        this.pid = this.$route.query.pid;
+        this.cid = this.$route.query.cid;
+        if(!this.cid){
+          this.contractForm.pid = this.pid;
+        }else{
+          this.getContractInfo();
+        }
+        this.getContractTypeList();
+        this.getProjectDeatil();
+        this.setHeaders(); 
+      },
+      beforeLeave(activeName, oldActiveName){
+        console.log(oldActiveName,'oldActiveName');
+        console.log(this.activeType);
+      },
+
+      getProjectDeatil(){
+        getProjectDeatil(this.pid).then((res)=>{
+          this.projectInfo = res.data.data;
+        })
+      },
+      getContractInfo(){
+        getContractInfo(this.cid).then((res)=>{
+          this.contractForm = res.data.data;
+          if(this.contractForm.startFileUrl){
+            this.isBackShow = true;
+          }
+        })
+      },
+
+      saveQuit(){
+        this.savecontract().then((res)=>{
+          this.contractForm.id = res.data.data.id;
+          this.$message({
+            type: "success",
+            message: "保存成功!"
+          });
+          this.$router.go(-1);
+        }).catch((res)=>{
+          console.log(res)
+        })
+      },
+      saveNext(){
+
+      },
+      savecontract(){
+        return new Promise((resolve, reject) => {
+          this.$refs['contractForm'].validate((valid) => {
+          if (valid) {
+            resolve(submitContractInfo(this.contractForm))
+          }else{
+            reject('验证失败')
+          }
+        })
+        })
+      },
+
+      handleRemove(file) {
+        //console.log(file, fileList);
+        removeFile(file.response.data.attachId).then(()=>{
+          this.contractForm.startFileUrl = '';
+        })
+      },
+      handleExceed() {
+        this.$message.warning(`当前限制选择 1 个文件,请先移除后,再次上传`);
+      },
+      handleSuccess(res){
+        this.contractForm.startFileUrl = res.data.link;
+      },
+      setHeaders(){
+        this.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
+        this.headers[website.tokenHeader] = 'bearer ' + getToken()
+      },
+
+      downloadFile(){
+        window.open(this.contractForm.startFileUrl);
+      },
+      delFile(){
+        this.$confirm('是否删除该文件?', '删除开工令', {
+          distinguishCancelAndClose: true,
+          confirmButtonText: '删除',
+          cancelButtonText: '取消'
+        }).then(() => {
+          delFileFromUrl(this.contractForm.startFileUrl).then(()=>{
+            this.isBackShow = false;
+            this.contractForm.startFileUrl = '';
+          })
+        })
+      },
+
+      getContractTypeList(){
+        if(this.contractTypeList.length >1){
+          return;
+        }
+        getDictionary({
+          code:'contract_type'
+        }).then((res)=>{
+          res.data.data.forEach(element => {
+            element.dictKey = Number(element.dictKey)
+          });
+          this.contractTypeList = res.data.data;
+        })
+      },
+
+    }
+  };
+</script>
+
+<style scoped lang="scss">
+  
+</style>

+ 17 - 5
src/views/manager/projectinfo/detail.vue

@@ -22,10 +22,10 @@
                     </el-select>
                   </el-form-item>
                   <el-form-item label="计划开工日期" prop="planStartTime">
-                    <el-date-picker  v-model="projectForm.planStartTime"  type="date"  placeholder="选择日期"></el-date-picker>
+                    <el-date-picker  v-model="projectForm.planStartTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
                   </el-form-item>
                   <el-form-item label="实际开工日期" prop="actualStartTime">
-                    <el-date-picker  v-model="projectForm.actualStartTime"  type="date"  placeholder="选择日期"></el-date-picker>
+                    <el-date-picker  v-model="projectForm.actualStartTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
                   </el-form-item>
                   <el-form-item label="项目预算投资" prop="estimatedAmount">
                     <el-input v-model="projectForm.estimatedAmount">
@@ -48,10 +48,10 @@
                     <el-input-number v-model="projectForm.projectSubgrade" v-show="radioType == '路基'" :min="0" label="路基"></el-input-number>
                   </el-form-item>
                   <el-form-item label="计划完工日期" prop="planEndTime">
-                    <el-date-picker  v-model="projectForm.planEndTime"  type="date"  placeholder="选择日期"></el-date-picker>
+                    <el-date-picker  v-model="projectForm.planEndTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
                   </el-form-item>
                   <el-form-item label="实际完工日期" prop="actualEndTime">
-                    <el-date-picker  v-model="projectForm.actualEndTime"  type="date"  placeholder="选择日期"></el-date-picker>
+                    <el-date-picker  v-model="projectForm.actualEndTime"  type="date" format="yyyy 年 MM 月 dd 日" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期"></el-date-picker>
                   </el-form-item>
                 </el-col>
               </el-row>
@@ -82,7 +82,7 @@
 </template>
 
 <script>
-  import {submitProject} from "@/api/manager/projectinfo";
+  import {submitProject,getProjectDeatil} from "@/api/manager/projectinfo";
   import {getDictionary} from "@/api/system/dict";
   import {mapGetters} from "vuex";
   export default {
@@ -90,6 +90,7 @@
       return {
         activeType:'1',
 
+        id:'',
         highwayGradeList:[],
         radioType:'总里程',
 
@@ -114,12 +115,22 @@
     methods: {
      init(){
        this.getHighwayGradeList();
+       this.id = this.$route.query.id;
+       if(this.id){
+         this.getProjectDeatil();
+       }
      },
      beforeLeave(activeName, oldActiveName){
        console.log(oldActiveName,'oldActiveName');
        console.log(this.activeType);
      },
 
+     getProjectDeatil(){
+        getProjectDeatil(this.id).then((res)=>{
+          this.projectForm = res.data.data;
+        })
+      },
+
      saveQuit(){
        this.saveProject().then((res)=>{
          this.projectForm.id = res.data.data.id;
@@ -127,6 +138,7 @@
             type: "success",
             message: "保存成功!"
           });
+          this.$router.go(-1);
        }).catch((res)=>{
          console.log(res)
        })

+ 27 - 3
src/views/manager/projectinfo/list.vue

@@ -31,8 +31,8 @@
         <span>{{curProjiect.projectName}}</span>
         <div>
           <el-button size="small" type="success">WBS树管理</el-button>
-          <el-button size="small" type="primary">编辑项目信息</el-button>
-          <el-button size="small" type="info">创建新合同段</el-button>
+          <el-button size="small" @click="editProject" type="primary">编辑项目信息</el-button>
+          <el-button size="small" @click="addContract" type="info">创建新合同段</el-button>
           <el-button size="small" @click="projectVisible = false">返回</el-button>
         </div>
       </div>
@@ -44,7 +44,7 @@
               <span class="mg-l-10">{{item.contractName}}</span>
             </div>
             <div class="flex jc-al-c">
-              <el-link type="primary" >编辑合同段信息</el-link>
+              <el-link type="primary" @click="editContract(item)">编辑合同段信息</el-link>
               <el-link type="primary" class="mg-l-10">分配WBS</el-link>
               <el-link type="primary" class="mg-l-10">分配项目人员</el-link>
               <el-link type="primary" class="mg-l-10">删除</el-link>
@@ -133,6 +133,30 @@
         }
       },
 
+      addContract(){
+        this.$router.push({
+          path:'/contract/detail',
+          query:{pid:this.curProjiect.id}
+        });
+      },
+      editContract(item){
+        this.$router.push({
+          path:'/contract/detail',
+          query:{
+            pid:item.pid,
+            cid:item.id,
+          }
+        });
+      },
+      editProject(){
+        this.$router.push({
+          path:'/manager/projectinfo/detail',
+          query:{
+            id:this.curProjiect.id
+          }
+        });
+      },
+
       getFont(type){
         if(type == 1){
           return '施';