Browse Source

项目实施报告和项目结题表接口联调

ljb 10 months ago
parent
commit
a436b7e86f

+ 21 - 0
src/api/projectManage/accept.js

@@ -0,0 +1,21 @@
+import request from '@/router/axios';
+
+// 获取阶段性详情
+export const getDetail = (params) => {
+  return request({
+    url: '/api/kd-scientific/xm/jtb/detail',
+    method: 'get',
+    params: {
+      ...params,
+    }
+  })
+}
+
+// 保存项目阶段性报告
+export const save = (row) => {
+  return request({
+    url: '/api/kd-scientific/xm/jtb/submit',
+    method: 'post',
+    data: row
+  })
+}

+ 21 - 0
src/api/projectManage/implement.js

@@ -0,0 +1,21 @@
+import request from '@/router/axios';
+
+// 获取阶段性详情
+export const getDetail = (params) => {
+  return request({
+    url: '/api/kd-scientific/xm/jdxbg/detail',
+    method: 'get',
+    params: {
+      ...params,
+    }
+  })
+}
+
+// 保存项目阶段性报告
+export const save = (row) => {
+  return request({
+    url: '/api/kd-scientific/xm/jdxbg/submit',
+    method: 'post',
+    data: row
+  })
+}

+ 1 - 1
src/components/project-select/index.vue

@@ -54,7 +54,7 @@ export default {
       })
       })
     },
     },
     getProjectList() {
     getProjectList() {
-      getAllProjectList(1, 99999, this.params).then(({ data }) => {
+      getAllProjectList(1, 99999).then(({ data }) => {
         if (data.success) {
         if (data.success) {
           this.projectList = data.data.records;
           this.projectList = data.data.records;
           this.xmId = this.value;
           this.xmId = this.value;

+ 15 - 6
src/views/project-manage/change.vue

@@ -3,7 +3,7 @@
     <div style="margin-top: 6px;">
     <div style="margin-top: 6px;">
       <el-form :inline="true">
       <el-form :inline="true">
         <el-form-item label="研发项目名称">
         <el-form-item label="研发项目名称">
-          <project-select v-model="currProjectId" @change="handleProjectChange"></project-select>
+          <project-select v-model="params.xmId" @change="handleProjectChange"></project-select>
         </el-form-item>
         </el-form-item>
         <el-form-item label="研发项目编号">
         <el-form-item label="研发项目编号">
           {{ selProject.xmbh }}
           {{ selProject.xmbh }}
@@ -55,7 +55,7 @@
       size="960px"
       size="960px"
     >
     >
       
       
-      <change-form></change-form>
+      <change-form :projectId="params.xmId"></change-form>
     </el-drawer>
     </el-drawer>
   </basic-container>
   </basic-container>
 </template>
 </template>
@@ -78,7 +78,9 @@ export default window.$crudCommon({
   },
   },
   data() {
   data() {
     return {
     return {
-      currProjectId: '',
+      params: {
+        xmId: ''
+      },
       selProject: {},
       selProject: {},
       drawerVisible: false,
       drawerVisible: false,
 
 
@@ -86,16 +88,23 @@ export default window.$crudCommon({
       printTitle: "",
       printTitle: "",
     };
     };
   },
   },
+  watch: {
+    "params.xmId"() {
+      this.page.currentPage = 1;
+      this.getList(this.page);
+    }
+  },
   created() {
   created() {
-    this.currProjectId = this.projectId;
+    this.params.xmId = this.projectId;
   },
   },
   methods: {
   methods: {
     handleProjectChange(data) {
     handleProjectChange(data) {
       this.selProject = data;
       this.selProject = data;
+      
     },
     },
     handleExport() {
     handleExport() {
       exportBloByPost(`/api/kd-scientific/xm-bgrz/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
       exportBloByPost(`/api/kd-scientific/xm-bgrz/export?${this.website.tokenHeader}=${getToken()}`, this.params).then(res => {
-        downloadXls(res.data, `项目变更列表.xlsx`);
+        downloadXls(res.data, `${this.selProject.xmmc}项目变更列表.xlsx`);
       });
       });
     },
     },
     /**
     /**
@@ -104,7 +113,7 @@ export default window.$crudCommon({
      */
      */
     printTable(isLandscape) {
     printTable(isLandscape) {
       this.wideTableColumns = this.$refs.crud.columnOption;
       this.wideTableColumns = this.$refs.crud.columnOption;
-      this.printTitle = `项目变更列表`;
+      this.printTitle = `${this.selProject.xmmc}项目变更列表`;
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.$refs.printWideTable.printTable(isLandscape);
         this.$refs.printWideTable.printTable(isLandscape);
       })
       })

+ 75 - 60
src/views/project-manage/components/accept-form.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <div class="doc-page">
+  <div class="doc-page" v-loading="loading">
     <h3 class="page-title" style="margin: 24px 0 16px;">科德集团</h3>
     <h3 class="page-title" style="margin: 24px 0 16px;">科德集团</h3>
     <h3 class="page-title" style="margin: 24px 0 16px;">研发项目验收资料</h3>
     <h3 class="page-title" style="margin: 24px 0 16px;">研发项目验收资料</h3>
 
 
@@ -10,7 +10,7 @@
       <div class="info-row">{{ `项目执行期:${ getXmDateRange || '' }` }}</div>
       <div class="info-row">{{ `项目执行期:${ getXmDateRange || '' }` }}</div>
       <div class="info-row">
       <div class="info-row">
         <span>填报时间:</span>
         <span>填报时间:</span>
-        <span><el-date-picker v-model="formData.tbsj" type="month" value-format="yyyy-MM" /></span>
+        <span><el-date-picker v-model="formData.tbsj" value-format="yyyy-MM-dd" /></span>
       </div>
       </div>
     </div>
     </div>
 
 
@@ -19,32 +19,17 @@
         <tr>
         <tr>
           <td class="doc-label">研发项目名称</td>
           <td class="doc-label">研发项目名称</td>
           <td class="doc-input">
           <td class="doc-input">
-            <el-select
-              v-model="formData.xmId"
-              filterable
-              remote
-              reserve-keyword
-              placeholder="请输入关键词"
-              :remote-method="remoteMethod"
-              :loading="loading"
-              style="width: 100%;"
-              :disabled="!formData.tbsj"
+            <project-select
+              v-model="currProjectId"
               @change="handleProjectChange"
               @change="handleProjectChange"
-            >
-              <el-option
-                v-for="item in projectList"
-                :key="item.id"
-                :label="item.xmmc"
-                :value="item.id">
-              </el-option>
-            </el-select>
+            ></project-select>
           </td>
           </td>
           <td class="doc-label">项目申请单位</td>
           <td class="doc-label">项目申请单位</td>
           <td class="doc-input">{{ selProject.xmsqdw }}</td>
           <td class="doc-input">{{ selProject.xmsqdw }}</td>
         </tr>
         </tr>
         <tr>
         <tr>
           <td class="doc-label">项目负责人</td>
           <td class="doc-label">项目负责人</td>
-          <td class="doc-input">{{ selProject.xmfzr }} </td>
+          <td class="doc-input">{{ selProject.xmfzrxm }} </td>
           <td class="doc-label">研究类型</td>
           <td class="doc-label">研究类型</td>
           <td class="doc-input">{{ selProject.yjlx }}</td>
           <td class="doc-input">{{ selProject.yjlx }}</td>
         </tr>
         </tr>
@@ -104,27 +89,30 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { getDictionary } from "@/api/system/dictbiz";
-import { getList as getProjectList } from "@/api/projectManage/projectList";
-import { add } from "@/api/projectManage/change";
+import projectSelect from "@/components/project-select";
+import { save, getDetail } from "@/api/projectManage/accept";
 import moment from "moment";
 import moment from "moment";
 
 
 export default {
 export default {
+  components: {
+    projectSelect
+  },
+  props: {
+    projectId: [String, Number]
+  },
   data() {
   data() {
     return {
     return {
       formData: {},
       formData: {},
 
 
-      changeTypeList: [],
-
       loading: false,
       loading: false,
       projectList: [],
       projectList: [],
       selProject: {},
       selProject: {},
 
 
+      currProjectId: '',
+
+      loading: false
     };
     };
   },
   },
-  mounted() {
-    this.getDictList("xm_biangeng_field", "changeTypeList");
-  },
   computed: {
   computed: {
     getXmDateRange() {
     getXmDateRange() {
       if (this.selProject.xmkssj && this.selProject.xmjssj) {
       if (this.selProject.xmkssj && this.selProject.xmjssj) {
@@ -152,7 +140,7 @@ export default {
               res: "data",
               res: "data",
             },
             },
             action: '/api/kd-resource/oss/endpoint/put-file',
             action: '/api/kd-resource/oss/endpoint/put-file',
-            disabled: !this.formData.xmId
+            disabled: !this.currProjectId
           },
           },
           {
           {
             label: "技术报告",
             label: "技术报告",
@@ -167,7 +155,7 @@ export default {
               res: "data",
               res: "data",
             },
             },
             action: '/api/kd-resource/oss/endpoint/put-file',
             action: '/api/kd-resource/oss/endpoint/put-file',
-            disabled: !this.formData.xmId
+            disabled: !this.currProjectId
           },
           },
           {
           {
             label: "成果报告",
             label: "成果报告",
@@ -182,7 +170,7 @@ export default {
               res: "data",
               res: "data",
             },
             },
             action: '/api/kd-resource/oss/endpoint/put-file',
             action: '/api/kd-resource/oss/endpoint/put-file',
-            disabled: !this.formData.xmId
+            disabled: !this.currProjectId
           },
           },
           {
           {
             label: "效益报告",
             label: "效益报告",
@@ -197,7 +185,7 @@ export default {
               res: "data",
               res: "data",
             },
             },
             action: '/api/kd-resource/oss/endpoint/put-file',
             action: '/api/kd-resource/oss/endpoint/put-file',
-            disabled: !this.formData.xmId
+            disabled: !this.currProjectId
           },
           },
           {
           {
             label: "验收批文",
             label: "验收批文",
@@ -212,42 +200,58 @@ export default {
               name: "originalName",
               name: "originalName",
               res: "data",
               res: "data",
             },
             },
-            disabled: !this.formData.xmId
+            disabled: !this.currProjectId
           },
           },
         ],
         ],
       }
       }
     }
     }
   },
   },
+  watch: {
+    currProjectId() {
+      this.getImplementDetail();
+    }
+  },
+  mounted() {
+    this.currProjectId = this.projectId || '';
+  },
   methods: {
   methods: {
-    getDictList(code, toListKey) {
-      getDictionary({ code }).then((res) => {
-        this[toListKey] = res.data.data.map((item) => {
-          return { label: item.dictValue, value: item.dictKey };
-        });
+    getImplementDetail() {
+      this.loading = true;
+      getDetail({ xmId: this.currProjectId, yearAndMonth: this.yearAndMonth }).then(({ data }) => {
+        this.loading = false;
+        if (data.code == 200 && data.data && Object.keys(data.data).length) {
+          this.formData = {
+            id: data.data.id,
+            xmId: data.data.xmId,
+            tbsj: data.data.tbsj,
+            ysbg: JSON.parse(data.data.ysbg),
+            jsbg: JSON.parse(data.data.jsbg),
+            cgbg: JSON.parse(data.data.cgbg),
+            xybg: JSON.parse(data.data.xybg),
+            yspw: JSON.parse(data.data.yspw),
+          };
+        } else {
+          this.formData = {
+            tbsj: '',
+            ysbg: [],
+            jsbg: [],
+            cgbg: [],
+            xybg: [],
+            yspw: [],
+          };
+        }
+      }).catch(() => {
+        this.loading = false;
       });
       });
     },
     },
-    remoteMethod(query) {
-      if (query !== '') {
-        this.loading = true;
-        setTimeout(() => {
-          this.loading = false;
-          getProjectList(1, 99999, { xmmc: query }).then(({ data }) => {
-            if (data.success) {
-              this.projectList = data.data.records;
-            }
-          })
-        }, 200);
-      } else {
-        this.projectList = [];
-      }
-    },
-    handleProjectChange(val) {
-      let currPro = this.projectList.find(item => item.id === val);
-      this.selProject = currPro;
+    handleProjectChange(data) {
+      this.selProject = data;
     },
     },
     validForm() {
     validForm() {
       let errorText = '';
       let errorText = '';
-      if (!this.formData.xmId) {
+      if (!this.formData.tbsj) {
+        errorText = '请选择填报时间';
+      } else if (!this.currProjectId) {
         errorText = '请选择填报的项目';
         errorText = '请选择填报的项目';
       }
       }
 
 
@@ -260,10 +264,21 @@ export default {
         return;
         return;
       }
       }
 
 
-      this.saveData(this.formData);
+      const params = { ...this.formData, xmId: this.currProjectId };
+      params.ysbg = JSON.stringify(params.ysbg);
+      params.jsbg = JSON.stringify(params.jsbg);
+      params.cgbg = JSON.stringify(params.cgbg);
+      params.xybg = JSON.stringify(params.xybg);
+      params.yspw = JSON.stringify(params.yspw);
+
+      this.saveData(params);
     },
     },
     saveData(params) {
     saveData(params) {
-      console.log(params)
+      save(params).then(({ data }) => {
+        if (data.code == 200) {
+          this.$message.success('保存成功!');
+        }
+      });
     }
     }
   },
   },
 };
 };

+ 3 - 0
src/views/project-manage/components/change-form.vue

@@ -117,6 +117,9 @@ import { add } from "@/api/projectManage/change";
 import moment from "moment";
 import moment from "moment";
 
 
 export default {
 export default {
+  props: {
+    xmId: [String, Number]
+  },
   data() {
   data() {
     return {
     return {
       formData: {},
       formData: {},

+ 63 - 29
src/views/project-manage/components/implement-form.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-  <div class="doc-page">
+  <div class="doc-page" v-loading="loading">
     <h3 class="page-title" style="margin: 24px 0 16px;">研发项目阶段性报告</h3>
     <h3 class="page-title" style="margin: 24px 0 16px;">研发项目阶段性报告</h3>
 
 
     <div class="project-basic-info">
     <div class="project-basic-info">
@@ -9,7 +9,7 @@
       <div class="info-row">{{ `项目执行期:${ getXmDateRange || '' }` }}</div>
       <div class="info-row">{{ `项目执行期:${ getXmDateRange || '' }` }}</div>
       <div class="info-row">
       <div class="info-row">
         <span>填报时间:</span>
         <span>填报时间:</span>
-        <span><el-date-picker v-model="formData.tbsj" type="month" value-format="yyyyMM" /></span>
+        <span><el-date-picker v-model="formData.tbsj" value-format="yyyy-MM-dd" /></span>
       </div>
       </div>
     </div>
     </div>
 
 
@@ -20,9 +20,7 @@
           <td class="doc-input">
           <td class="doc-input">
             <project-select
             <project-select
               v-model="currProjectId"
               v-model="currProjectId"
-              :params="{yearAndMonth: formData.tbsj}"
               @change="handleProjectChange"
               @change="handleProjectChange"
-              :disabled="!formData.tbsj"
             ></project-select>
             ></project-select>
           </td>
           </td>
           <td class="doc-label">项目申请单位</td>
           <td class="doc-label">项目申请单位</td>
@@ -30,7 +28,7 @@
         </tr>
         </tr>
         <tr>
         <tr>
           <td class="doc-label">项目负责人</td>
           <td class="doc-label">项目负责人</td>
-          <td class="doc-input">{{ selProject.xmfzr }} </td>
+          <td class="doc-input">{{ selProject.xmfzrxm }} </td>
           <td class="doc-label">研究类型</td>
           <td class="doc-label">研究类型</td>
           <td class="doc-input">{{ selProject.yjlx }}</td>
           <td class="doc-input">{{ selProject.yjlx }}</td>
         </tr>
         </tr>
@@ -90,14 +88,14 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import { getDictionary } from "@/api/system/dictbiz";
 import projectSelect from "@/components/project-select";
 import projectSelect from "@/components/project-select";
-import { saveJdxbg } from "@/api/projectManage/projectList";
+import { save, getDetail } from "@/api/projectManage/implement";
 import moment from "moment";
 import moment from "moment";
 
 
 export default {
 export default {
   props: {
   props: {
-    projectId: [String, Number]
+    projectId: [String, Number],
+    yearAndMonth: [Number, String]
   },
   },
   components: {
   components: {
     projectSelect
     projectSelect
@@ -106,8 +104,6 @@ export default {
     return {
     return {
       formData: {},
       formData: {},
 
 
-      changeTypeList: [],
-
       loading: false,
       loading: false,
       projectList: [],
       projectList: [],
 
 
@@ -115,10 +111,6 @@ export default {
       selProject: {},
       selProject: {},
     };
     };
   },
   },
-  mounted() {
-    this.currProjectId = this.projectId || '';
-    this.getDictList("xm_biangeng_field", "changeTypeList");
-  },
   computed: {
   computed: {
     getXmDateRange() {
     getXmDateRange() {
       if (this.selProject.xmkssj && this.selProject.xmjssj) {
       if (this.selProject.xmkssj && this.selProject.xmjssj) {
@@ -142,7 +134,7 @@ export default {
             dataType: "object",
             dataType: "object",
             propsHttp: {
             propsHttp: {
               url: "link",
               url: "link",
-              name: 'name',
+              name: 'originalName',
               res: "data",
               res: "data",
             },
             },
             action: '/api/kd-resource/oss/endpoint/put-file',
             action: '/api/kd-resource/oss/endpoint/put-file',
@@ -212,21 +204,55 @@ export default {
       }
       }
     }
     }
   },
   },
+  watch: {
+    currProjectId() {
+      this.getImplementDetail();
+    }
+  },
+  mounted() {
+    this.currProjectId = this.projectId || '';
+    if (this.currProjectId) {
+      this.getImplementDetail();
+    }
+  },
   methods: {
   methods: {
+    getImplementDetail() {
+      this.loading = true;
+      getDetail({ xmId: this.currProjectId, yearAndMonth: this.yearAndMonth }).then(({ data }) => {
+        this.loading = false;
+        if (data.code == 200 && data.data && Object.keys(data.data).length) {
+          this.formData = {
+            id: data.data.id,
+            xmId: data.data.xmId,
+            tbsj: data.data.tbsj,
+            jdbg: JSON.parse(data.data.jdbg),
+            zqbg: JSON.parse(data.data.zqbg),
+            ndbg: JSON.parse(data.data.ndbg),
+            lcbbg: JSON.parse(data.data.lcbbg),
+            qtjdxzjbg: JSON.parse(data.data.qtjdxzjbg),
+          };
+        } else {
+          this.formData = {
+            tbsj: '',
+            jdbg: [],
+            zqbg: [],
+            ndbg: [],
+            lcbbg: [],
+            qtjdxzjbg: [],
+          };
+        }
+      }).catch(() => {
+        this.loading = false;
+      });
+    },
     handleProjectChange(data) {
     handleProjectChange(data) {
-      console.log(data)
       this.selProject = data;
       this.selProject = data;
     },
     },
-    getDictList(code, toListKey) {
-      getDictionary({ code }).then((res) => {
-        this[toListKey] = res.data.data.map((item) => {
-          return { label: item.dictValue, value: item.dictKey };
-        });
-      });
-    },
     validForm() {
     validForm() {
       let errorText = '';
       let errorText = '';
-      if (!this.currProjectId) {
+      if (!this.formData.tbsj) {
+        errorText = '请选择填报时间';
+      } else if (!this.currProjectId) {
         errorText = '请选择填报的项目';
         errorText = '请选择填报的项目';
       }
       }
 
 
@@ -239,13 +265,21 @@ export default {
         return;
         return;
       }
       }
 
 
-      this.saveData(this.formData);
+      const params = { ...this.formData, xmId: this.currProjectId };
+      params.jdbg = JSON.stringify(params.jdbg);
+      params.zqbg = JSON.stringify(params.zqbg);
+      params.ndbg = JSON.stringify(params.ndbg);
+      params.lcbbg = JSON.stringify(params.lcbbg);
+      params.qtjdxzjbg = JSON.stringify(params.qtjdxzjbg);
+
+      this.saveData(params);
     },
     },
     saveData(params) {
     saveData(params) {
-      console.log(params)
-      // saveJdxbg(params).then(res => {
-      //   console.log(res)
-      // });
+      save(params).then(({ data }) => {
+        if (data.code == 200) {
+          this.$message.success('保存成功!');
+        }
+      });
     }
     }
   },
   },
 };
 };

+ 10 - 6
src/views/project-manage/project-list.vue

@@ -50,7 +50,7 @@
       title="项目信息"
       title="项目信息"
       modal-append-to-body
       modal-append-to-body
       append-to-body
       append-to-body
-      size="1200px"
+      size="1280px"
       destroy-on-close
       destroy-on-close
     >
     >
       <el-tabs type="border-card">
       <el-tabs type="border-card">
@@ -61,16 +61,18 @@
           <project-budget :projectId="currProjectId"></project-budget>
           <project-budget :projectId="currProjectId"></project-budget>
         </el-tab-pane>
         </el-tab-pane>
         <el-tab-pane label="3、项目实施" lazy>
         <el-tab-pane label="3、项目实施" lazy>
-          <implement-form></implement-form>
+          <implement-form :projectId="currProjectId" :yearAndMonth="params.yearAndMonth"></implement-form>
         </el-tab-pane>
         </el-tab-pane>
         <el-tab-pane label="4、项目变更" lazy>
         <el-tab-pane label="4、项目变更" lazy>
-          <change></change>
+          <change :projectId="currProjectId"></change>
         </el-tab-pane>
         </el-tab-pane>
         <el-tab-pane label="5、项目结题" lazy>
         <el-tab-pane label="5、项目结题" lazy>
-          <accept-form></accept-form>
+          <accept-form :projectId="currProjectId"></accept-form>
         </el-tab-pane>
         </el-tab-pane>
         <el-tab-pane label="6、项目成果" lazy></el-tab-pane>
         <el-tab-pane label="6、项目成果" lazy></el-tab-pane>
-        <el-tab-pane label="7、委外材料" lazy></el-tab-pane>
+        <el-tab-pane label="7、委外材料" lazy>
+          <outsourcing-doc :projectId="currProjectId"></outsourcing-doc>
+        </el-tab-pane>
       </el-tabs>
       </el-tabs>
     </el-drawer>
     </el-drawer>
   </basic-container>
   </basic-container>
@@ -87,6 +89,7 @@ import projectBudget from "./components/project-budget.vue";
 import implementForm from './components/implement-form.vue';
 import implementForm from './components/implement-form.vue';
 import change from "./change.vue";
 import change from "./change.vue";
 import acceptForm from "./components/accept-form.vue";
 import acceptForm from "./components/accept-form.vue";
+import outsourcingDoc from "./components/outsourcing-doc.vue";
 
 
 
 
 export default window.$crudCommon({
 export default window.$crudCommon({
@@ -97,6 +100,7 @@ export default window.$crudCommon({
     implementForm,
     implementForm,
     change,
     change,
     acceptForm,
     acceptForm,
+    outsourcingDoc,
   },
   },
   data() {
   data() {
     return {
     return {
@@ -109,7 +113,7 @@ export default window.$crudCommon({
 
 
       drawerVisible: false,
       drawerVisible: false,
 
 
-      currProjectId: ''
+      currProjectId: '',
     };
     };
   },
   },
   watch: {
   watch: {