Browse Source

项目实施新增功能,项目下拉根据填报时间动态获取

ljb 9 months ago
parent
commit
f10d40c3e6

+ 2 - 5
src/api/projectManage/implement.js

@@ -9,13 +9,10 @@ export const getList = (xmId) => {
 }
 }
 
 
 // 获取阶段性详情
 // 获取阶段性详情
-export const getDetail = (params) => {
+export const getDetail = (id) => {
   return request({
   return request({
-    url: '/api/kd-scientific/xm/jdxbg/detail',
+    url: '/api/kd-scientific/xm/jdxbg/'+id,
     method: 'get',
     method: 'get',
-    params: {
-      ...params,
-    }
   })
   })
 }
 }
 
 

+ 15 - 9
src/components/project-select/index.vue

@@ -49,8 +49,20 @@ export default {
       projectList: []
       projectList: []
     }
     }
   },
   },
+  watch: {
+    value(newVal) {
+      this.xmId = newVal;
+    }
+  },
   mounted() {
   mounted() {
-    this.getProjectList();
+    this.getProjectList(() => {
+      this.xmId = this.value;
+      if (!this.multiple) {
+        this.findProjectObj(this.value, proData => {
+          this.$emit('change', proData);
+        });
+      }
+    });
   },
   },
   methods: {
   methods: {
     findProjectObj(id, callback) {
     findProjectObj(id, callback) {
@@ -68,17 +80,11 @@ export default {
         callback && callback(detailData);
         callback && callback(detailData);
       })
       })
     },
     },
-    getProjectList() {
+    getProjectList(succCallback) {
       getAllProjectList(1, 99999, this.params).then(({ data }) => {
       getAllProjectList(1, 99999, this.params).then(({ data }) => {
         if (data.success) {
         if (data.success) {
           this.projectList = data.data.records;
           this.projectList = data.data.records;
-          this.xmId = this.value;
-
-          if (!this.multiple) {
-            this.findProjectObj(this.value, proData => {
-              this.$emit('change', proData);
-            });
-          }
+          succCallback && succCallback(this.projectList);
         }
         }
       })
       })
     },
     },

+ 89 - 169
src/views/project-manage/components/implement-form.vue

@@ -9,64 +9,100 @@
       <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.fillDate" value-format="yyyy-MM-dd" /></span>
+        <span><el-date-picker v-model="formData.fillDate" value-format="yyyy-MM-dd" @change="handleFillDateChange" :disabled="disabled" /></span>
       </div>
       </div>
     </div>
     </div>
 
 
     <table style="margin-top: 20px;">
     <table style="margin-top: 20px;">
       <tbody>
       <tbody>
         <tr>
         <tr>
-          <td class="doc-label">研发项目名称</td>
+          <td class="doc-label"><span style="color: red; margin-right: 3px;">*</span>研发项目名称</td>
           <td class="doc-input">
           <td class="doc-input">
             <project-select
             <project-select
+              v-if="!disabled"
+              ref="proSelect"
               v-model="currProjectId"
               v-model="currProjectId"
+              :disabled="!formData.fillDate || disabled"
               @change="handleProjectChange"
               @change="handleProjectChange"
+              :params="{ yearAndMonth: fillDateYearAndMonth }"
             ></project-select>
             ></project-select>
+            <span v-else>{{ formData.xmEntity.xmmc }}</span>
           </td>
           </td>
           <td class="doc-label">项目申请单位</td>
           <td class="doc-label">项目申请单位</td>
-          <td class="doc-input">{{ selProject.xmsqdw }}</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmsqdw }}</span>
+            <span v-else>{{ formData.xmEntity.xmsqdw }}</span>
+          </td>
         </tr>
         </tr>
 
 
         <tr>
         <tr>
           <td class="doc-label">项目编号</td>
           <td class="doc-label">项目编号</td>
-          <td class="doc-input">{{ selProject.xmbh }} </td>
-          <td class="doc-label">项目实施类型</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmbh }}</span>
+            <span v-else>{{ formData.xmEntity.xmbh }}</span>
+          </td>
+          <td class="doc-label"><span style="color: red; margin-right: 3px;">*</span>项目实施类型</td>
           <td class="doc-input">
           <td class="doc-input">
             <avue-select
             <avue-select
               v-model="formData.type"
               v-model="formData.type"
               placeholder="请选择"
               placeholder="请选择"
               :dic="typeList"
               :dic="typeList"
               style="width: 100%"
               style="width: 100%"
+              :disabled="disabled"
             ></avue-select>
             ></avue-select>
           </td>
           </td>
         </tr>
         </tr>
 
 
         <tr>
         <tr>
           <td class="doc-label">项目负责人</td>
           <td class="doc-label">项目负责人</td>
-          <td class="doc-input">{{ selProject.xmfzrxm }} </td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmfzrxm }}</span>
+            <span v-else>{{ formData.xmEntity.xmfzrxm }}</span>
+          </td>
           <td class="doc-label">研究类型</td>
           <td class="doc-label">研究类型</td>
-          <td class="doc-input">{{ selProject.yjlx }}</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.yjlx }}</span>
+            <span v-else>{{ formData.xmEntity.yjlx }}</span>
+          </td>
         </tr>
         </tr>
 
 
         <tr>
         <tr>
           <td class="doc-label">研发开始时间</td>
           <td class="doc-label">研发开始时间</td>
-          <td class="doc-input">{{ selProject.xmkssj }} </td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmkssj }}</span>
+            <span v-else>{{ formData.xmEntity.xmkssj }}</span>
+          </td>
           <td class="doc-label">研发结束时间</td>
           <td class="doc-label">研发结束时间</td>
-          <td class="doc-input">{{ selProject.xmjssj }}</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmkssj }}</span>
+            <span v-else>{{ formData.xmEntity.xmjssj }}</span>
+          </td>
         </tr>
         </tr>
 
 
         <tr>
         <tr>
           <td class="doc-label">项目来源</td>
           <td class="doc-label">项目来源</td>
-          <td class="doc-input">{{ selProject.xmly }} </td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmly }}</span>
+            <span v-else>{{ formData.xmEntity.xmly }}</span>
+          </td>
           <td class="doc-label">项目开展形式</td>
           <td class="doc-label">项目开展形式</td>
-          <td class="doc-input">{{ selProject.xmkzxs }}</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmkzxs }}</span>
+            <span v-else>{{ formData.xmEntity.xmkzxs }}</span>
+          </td>
         </tr>
         </tr>
 
 
         <tr>
         <tr>
           <td class="doc-label">预期成果形式</td>
           <td class="doc-label">预期成果形式</td>
-          <td class="doc-input">{{ selProject.yqcgxs }} </td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.yqcgxs }}</span>
+            <span v-else>{{ formData.xmEntity.yqcgxs }}</span>
+          </td>
           <td class="doc-label">项目技术经济目标</td>
           <td class="doc-label">项目技术经济目标</td>
-          <td class="doc-input">{{ selProject.xmjsjjmb }}</td>
+          <td class="doc-input">
+            <span v-if="!disabled">{{ selProject.xmjsjjmb }}</span>
+            <span v-else>{{ formData.xmEntity.xmjsjjmb }}</span>
+          </td>
         </tr>
         </tr>
 
 
       </tbody>
       </tbody>
@@ -77,22 +113,6 @@
         <label>附件信息</label>
         <label>附件信息</label>
         <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
         <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
       </template>
       </template>
-      <!-- <template slot="zqbgLabel">
-        <label>中期报告</label>
-        <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
-      </template>
-      <template slot="ndbgLabel">
-        <label>年度报告</label>
-        <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
-      </template>
-      <template slot="lcbbgLabel">
-        <label>里程碑报告</label>
-        <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
-      </template>
-      <template slot="qtjdxzjbgLabel">
-        <label>其他阶段性总结报告</label>
-        <el-link type="primary" style="position: absolute; left: 290px; z-index: 1;">下载模板</el-link>
-      </template> -->
     </avue-form>
     </avue-form>
     <p class="tip">注:可一次上传多个相关文件(文档、表格、图片等)。 支持格式:DOC, PDF, Excel, PNG, JPG, PPT 等。 请确保文件内容清晰有效。</p>
     <p class="tip">注:可一次上传多个相关文件(文档、表格、图片等)。 支持格式:DOC, PDF, Excel, PNG, JPG, PPT 等。 请确保文件内容清晰有效。</p>
 
 
@@ -110,8 +130,11 @@ import moment from "moment";
 
 
 export default {
 export default {
   props: {
   props: {
-    projectId: [String, Number],
-    data: Object,
+    implementId: [String, Number],
+    disabled: {
+      type: Boolean,
+      default: false
+    }
   },
   },
   components: {
   components: {
     projectSelect
     projectSelect
@@ -137,6 +160,9 @@ export default {
       }
       }
       return `年 月 日至 年 月 日`;
       return `年 月 日至 年 月 日`;
     },
     },
+    fillDateYearAndMonth() {
+      return this.formData.fillDate ? moment(this.formData.fillDate).format('yyyyMM') : ''
+    },
     option() {
     option() {
       return {
       return {
         menuBtn: false,
         menuBtn: false,
@@ -159,112 +185,13 @@ export default {
               window.open(file.url, "_blank");
               window.open(file.url, "_blank");
               return;
               return;
             },
             },
-            disabled: !this.currProjectId
+            disabled: !this.currProjectId || this.disabled,
           },
           },
-          // {
-          //   label: "季度报告",
-          //   prop: "jdbg",
-          //   type: "upload",
-          //   multiple: true,
-          //   span: 24,
-          //   dataType: "object",
-          //   propsHttp: {
-          //     url: "link",
-          //     name: 'originalName',
-          //     res: "data",
-          //   },
-          //   action: '/api/kd-resource/oss/endpoint/put-file',
-          //   uploadPreview: (file, column, done) => {
-          //     window.open(file.url, "_blank");
-          //     return;
-          //   },
-          //   disabled: !this.currProjectId
-          // },
-          // {
-          //   label: "中期报告",
-          //   prop: "zqbg",
-          //   type: "upload",
-          //   multiple: true,
-          //   span: 24,
-          //   dataType: "object",
-          //   propsHttp: {
-          //     url: "link",
-          //     name: 'originalName',
-          //     res: "data",
-          //   },
-          //   action: '/api/kd-resource/oss/endpoint/put-file',
-          //   uploadPreview: (file, column, done) => {
-          //     window.open(file.url, "_blank");
-          //     return;
-          //   },
-          //   disabled: !this.currProjectId
-          // },
-          // {
-          //   label: "年度报告",
-          //   prop: "ndbg",
-          //   type: "upload",
-          //   multiple: true,
-          //   span: 24,
-          //   action: '/api/kd-resource/oss/endpoint/put-file',
-          //   uploadPreview: (file, column, done) => {
-          //     window.open(file.url, "_blank");
-          //     return;
-          //   },
-          //   dataType: "object",
-          //   propsHttp: {
-          //     url: "link",
-          //     name: 'originalName',
-          //     res: "data",
-          //   },
-          //   disabled: !this.currProjectId
-          // },
-          // {
-          //   label: "里程碑报告",
-          //   prop: "lcbbg",
-          //   type: "upload",
-          //   multiple: true,
-          //   span: 24,
-          //   action: '/api/kd-resource/oss/endpoint/put-file',
-          //   uploadPreview: (file, column, done) => {
-          //     window.open(file.url, "_blank");
-          //     return;
-          //   },
-          //   dataType: "object",
-          //   propsHttp: {
-          //     url: "link",
-          //     name: 'originalName',
-          //     res: "data",
-          //   },
-          //   disabled: !this.currProjectId
-          // },
-          // {
-          //   label: "其他阶段性总结报告",
-          //   prop: "qtjdxzjbg",
-          //   type: "upload",
-          //   multiple: true,
-          //   span: 24,
-          //   action: '/api/kd-resource/oss/endpoint/put-file',
-          //   uploadPreview: (file, column, done) => {
-          //     window.open(file.url, "_blank");
-          //     return;
-          //   },
-          //   dataType: "object",
-          //   propsHttp: {
-          //     url: "link",
-          //     name: 'originalName',
-          //     res: "data",
-          //   },
-          //   disabled: !this.currProjectId
-          // },
         ],
         ],
       }
       }
     }
     }
   },
   },
   watch: {
   watch: {
-    currProjectId() {
-      // this.getImplementDetail();
-      
-    },
     detailData: {
     detailData: {
       handler(newVal) {
       handler(newVal) {
         this.formData = newVal || {};
         this.formData = newVal || {};
@@ -273,18 +200,24 @@ export default {
     }
     }
   },
   },
   mounted() {
   mounted() {
-    this.currProjectId = this.projectId || '';
-    // if (this.currProjectId) {
-    //   this.getImplementDetail();
-    // }
-
-    this.formData = {
-      ...this.data,
-    };
-
+    if (this.implementId) {
+      this.getImplementDetail();
+    }
+    console.log(this.disabled)
     this.getDictList("项目实施-阶段性报告-附件类型", "typeList");
     this.getDictList("项目实施-阶段性报告-附件类型", "typeList");
   },
   },
   methods: {
   methods: {
+    handleFillDateChange(e) {
+      this.loading = true;
+      this.$refs.proSelect.getProjectList((list) => {
+        let _flag = list.some(item => item.id === this.currProjectId);
+        this.loading = false;
+        if (!_flag) {
+          this.currProjectId = '';
+          this.selProject = {};
+        }
+      });
+    },
     getDictList(code, toListKey) {
     getDictList(code, toListKey) {
       getDictionary({ code }).then((res) => {
       getDictionary({ code }).then((res) => {
         this[toListKey] = res.data.data.map((item) => {
         this[toListKey] = res.data.data.map((item) => {
@@ -292,35 +225,22 @@ export default {
         });
         });
       });
       });
     },
     },
-    // 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: data.data.jdbg ? JSON.parse(data.data.jdbg) : [],
-    //         zqbg: data.data.zqbg ? JSON.parse(data.data.zqbg) : [],
-    //         ndbg: data.data.ndbg ? JSON.parse(data.data.ndbg) : [],
-    //         lcbbg: data.data.lcbbg ? JSON.parse(data.data.lcbbg) : [],
-    //         qtjdxzjbg: data.data.qtjdxzjbg ? JSON.parse(data.data.qtjdxzjbg) : [],
-    //       };
-    //     } else {
-    //       this.formData = {
-    //         tbsj: '',
-    //         jdbg: [],
-    //         zqbg: [],
-    //         ndbg: [],
-    //         lcbbg: [],
-    //         qtjdxzjbg: [],
-    //       };
-    //     }
-    //   }).catch(() => {
-    //     this.loading = false;
-    //   });
-    // },
+    getImplementDetail() {
+      this.loading = true;
+      getDetail(this.implementId).then(({ data }) => {
+        this.loading = false;
+        if (data.code == 200) {
+          this.formData = {
+            ...data.data,
+            attachment: JSON.parse(data.data.attachment)
+          };
+          this.currProjectId = data.data.xmId;
+        }
+        
+      }).catch(() => {
+        this.loading = false;
+      });
+    },
     handleProjectChange(data) {
     handleProjectChange(data) {
       this.selProject = data;
       this.selProject = data;
     },
     },

+ 6 - 14
src/views/project-manage/implement.vue

@@ -38,7 +38,7 @@
       </template>
       </template>
 
 
       <template slot-scope="{row, index}" slot="menu">
       <template slot-scope="{row, index}" slot="menu">
-        <el-button type="text" icon="el-icon-edit" @click="rowEdit(row)" style="margin-right: 12px;">编辑</el-button>
+        <!-- <el-button type="text" icon="el-icon-edit" @click="rowEdit(row)" style="margin-right: 12px;">编辑</el-button> -->
         <el-button type="text" icon="el-icon-delete" style="margin-left: 0;" @click="rowDel(row, index)">删除</el-button>
         <el-button type="text" icon="el-icon-delete" style="margin-left: 0;" @click="rowDel(row, index)">删除</el-button>
       </template>
       </template>
       
       
@@ -63,8 +63,7 @@
     >
     >
       
       
       <implement-form
       <implement-form
-        :projectId="params.xmId"
-        :data="implementFormData"
+        :implementId="currId"
         :disabled="isFormReadonly"
         :disabled="isFormReadonly"
         @success="handleImplementSucc"
         @success="handleImplementSucc"
       >
       >
@@ -102,7 +101,7 @@ export default window.$crudCommon({
       wideTableColumns: [],
       wideTableColumns: [],
       printTitle: "",
       printTitle: "",
 
 
-      implementFormData: {},
+      currId: {},
       isFormReadonly: false,
       isFormReadonly: false,
     };
     };
   },
   },
@@ -129,7 +128,7 @@ export default window.$crudCommon({
           item.xmmc = item.xmEntity ? item.xmEntity.xmmc : '';
           item.xmmc = item.xmEntity ? item.xmEntity.xmmc : '';
           item.xmbh = item.xmEntity ? item.xmEntity.xmbh : '';
           item.xmbh = item.xmEntity ? item.xmEntity.xmbh : '';
           item.xmsqdw = item.xmEntity ? item.xmEntity.xmsqdw : '';
           item.xmsqdw = item.xmEntity ? item.xmEntity.xmsqdw : '';
-          item.xmfzrxm = item.xmEntity && item.xmEntity.technicianEntity ? item.xmEntity.technicianEntity.name : '';
+          item.xmfzrxm = item.xmEntity ? item.xmEntity.xmfzrxm : '';
           return item;
           return item;
         });
         });
         this.loading = false;
         this.loading = false;
@@ -158,26 +157,19 @@ export default window.$crudCommon({
     handleAdd() {
     handleAdd() {
       this.drawerVisible = true;
       this.drawerVisible = true;
       this.isFormReadonly = false;
       this.isFormReadonly = false;
+      this.currId = '';
       this.drawerTitle = "新增阶段性报告";
       this.drawerTitle = "新增阶段性报告";
-      this.implementFormData = {};
     },
     },
     rowEdit(data) {
     rowEdit(data) {
       this.drawerVisible = true;
       this.drawerVisible = true;
       this.isFormReadonly = false;
       this.isFormReadonly = false;
       this.drawerTitle = "编辑阶段性报告";
       this.drawerTitle = "编辑阶段性报告";
-      this.implementFormData = {
-        ...data,
-        attachment: data.attachment ? JSON.parse(data.attachment) : []
-      };
     },
     },
     handleRowDbClick(data) {
     handleRowDbClick(data) {
       this.drawerVisible = true;
       this.drawerVisible = true;
       this.isFormReadonly = true;
       this.isFormReadonly = true;
+      this.currId = data.id;
       this.drawerTitle = "阶段性报告详情";
       this.drawerTitle = "阶段性报告详情";
-      this.implementFormData = {
-        ...data,
-        attachment: data.attachment ? JSON.parse(data.attachment) : []
-      };
     },
     },
     handleChangeSucc() {
     handleChangeSucc() {
       this.drawerVisible = false;
       this.drawerVisible = false;