Explorar o código

报告的完成等

zhuliu hai 1 ano
pai
achega
aab37012e9

+ 6 - 1
src/api/newApi/importAndExport.js

@@ -33,5 +33,10 @@ export default {
     patentSelect(data) {
         return axios.post('/xiaoshi/patentStar/select', data)
     },
-   
+   /**
+    * 获取报告模板
+    */
+   queryTempleByType(data) {
+    return axios.post('/xiaoshi/template/queryTempleByType', data)
+},
 }

+ 21 - 1
src/api/newApi/report.js

@@ -483,6 +483,13 @@ updateSupplyEvidence(data) {
   queryInvalidStatutes(data) {
     return axios.post("/xiaoshi/invalidStatutes/queryInvalidStatutes", data);
   },
+   /**
+    * 无效应对
+    * 删除无效法条
+  */
+   removeInvalidStatutes(params) {
+    return axios.get("/xiaoshi/invalidStatutes/removeInvalidStatutes", {params});
+  },
   /**
     * 无效应对
     * 修改无效法条信息(法院意见)
@@ -568,7 +575,13 @@ updateSupplyEvidence(data) {
   queryPatentClaimHistory(data) {
     return axios.post("/xiaoshi/patentClaimHistory/queryPatentClaimHistory", data);
   },
-
+  /**
+    * 无效应对
+    * 取消权要修改历史
+  */
+  cancelRemoveClaims(params) {
+      return axios.get("/xiaoshi/patentClaimHistory/cancelRemoveClaims", {params});
+    },
   /**
     * 无效应对
     *修改特征
@@ -597,6 +610,13 @@ updateSupplyEvidence(data) {
   queryFeatureHistory(data) {
     return axios.post("/xiaoshi/groupFeature/queryFeatureHistory", data);
   },
+  /**
+    * 无效应对
+    *取消删除特征修改历史
+  */
+    cancelRemoveFeature(params) {
+      return axios.get("/xiaoshi/groupFeature/cancelRemoveFeature", {params});
+    },
  /**
     * 无效应对
     *批量添加或更新特征

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3 - 0
src/assets/svg/401.vue


+ 18 - 1
src/router/index.js

@@ -526,7 +526,24 @@ const routes = [
         },
         component: () => import('@/views/components/indicia/index.vue'),
       },
-
+      //错误网页
+      {
+        path: '/errorPage',
+        name: 'errorPage',
+        component: { render(c) { return c('router-view') } },
+        redirect: '/errorPage',
+        children: [
+          {
+            path: '/401',
+            meta: {
+              title: '事件',
+              sign: '401',
+              belong: 'errorPage'
+            },
+            component: () => import('@/views/components/errorPage/401.vue'),
+          },
+        ],
+      },
 
     ]
   },

+ 5 - 5
src/utils/model/route.vue

@@ -9,10 +9,10 @@
       <div slot="right">222</div>
     </myView2> -->
     <!-- <avoidDirection></avoidDirection> -->
-    <!-- <report></report> -->
-    <div @mouseup="up">
+    <!-- <div @mouseup="up">
       gsdtuicsahcviodkfvdf
-    </div>
+    </div> -->
+    <errorPage></errorPage>
   </div>
 </template>
 
@@ -20,13 +20,13 @@
 import myView2 from './myView/index.vue'
 import avoidDirection from '@/views/report/avoid/components/avoidDirection.vue'
 import PatentField from '@/views/project/patentDetails/components/PatentField.vue'
-import report from '@/views/report/InvalidResponse/components/pictureManage/pictureManage.vue'
+import errorPage from '@/views/components/errorPage/401.vue'
 export default {
   components: {
     myView2,
     avoidDirection,
     PatentField,
-    report
+    errorPage
   },
   props: {},
   data() {

+ 30 - 0
src/views/components/errorPage/401.vue

@@ -0,0 +1,30 @@
+<template>
+  <div class="height_100">
+    <ErrorPageLayout>
+        <page401/>
+    </ErrorPageLayout>
+  </div>
+</template>
+
+<script>
+import ErrorPageLayout from './components/ErrorPageLayout.vue'
+import page401 from '@/assets/svg/401.vue'
+export default {
+  components: {
+    ErrorPageLayout,
+    page401
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 25 - 0
src/views/components/errorPage/components/ErrorPageLayout.vue

@@ -0,0 +1,25 @@
+<template>
+    <div class="error-page">
+      <div class="error-page-svg">
+        <slot />
+      </div>
+      <router-link to="/">
+        <el-button type="primary">回到首页</el-button>
+      </router-link>
+    </div>
+</template>
+  
+<style lang="scss" scoped>
+.error-page {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    &-svg {
+      width: 400px;
+      margin-bottom: 50px;
+    }
+  }
+  </style>
+  

+ 5 - 5
src/views/home/index.vue

@@ -93,11 +93,11 @@ export default {
           value: 'Project',
           placeholder: '请输入专利数据库名称'
         },
-        {
-          label: '专利',
-          value: 'patentNo',
-          placeholder: '请输入专利'
-        },
+        // {
+        //   label: '专利',
+        //   value: 'patentNo',
+        //   placeholder: '请输入专利'
+        // },
         {
           label: '产品',
           value: 'Product',

+ 1 - 1
src/views/layout/components/UserBar.vue

@@ -8,7 +8,7 @@
           </el-link>
         <el-dropdown-menu slot="dropdown">
           <el-dropdown-item>接口检索</el-dropdown-item>
-          <el-dropdown-item>本地专利检索</el-dropdown-item>
+          <!-- <el-dropdown-item>本地专利检索</el-dropdown-item> -->
         </el-dropdown-menu>
       </el-dropdown>
     </div>

+ 0 - 1
src/views/layout/mixins/index.js

@@ -19,7 +19,6 @@ export const webSocket = {
           if (data.complete) {
               this.$message.success(`导入完成`)
           }else{
-            console.log(data)
           }
         }
       }

+ 2 - 2
src/views/project/patentCollection/index.vue

@@ -144,10 +144,10 @@
                   批量操作<i class="el-icon-arrow-down el-icon--right"></i>
                 </el-button>
                 <el-dropdown-menu slot="dropdown">
-                  <el-dropdown-item @click.native="handleRead(1)"
+                  <!-- <el-dropdown-item @click.native="handleRead(1)"
                     :disabled="!$permission('/workspace/folder/isRead')">已读</el-dropdown-item>
                   <el-dropdown-item @click.native="handleRead(0)"
-                    :disabled="!$permission('/workspace/folder/isRead')">未读</el-dropdown-item>
+                    :disabled="!$permission('/workspace/folder/isRead')">未读</el-dropdown-item> -->
                   <!-- <el-dropdown-item @click.native="handleIndex"
                     :disabled="!($permission('/workspace/folder/batchOperation/batchIndexing') && $r(projectId, [1, 2]))">批量标引</el-dropdown-item> -->
                   <el-dropdown-item @click.native="handleIndex">批量标引</el-dropdown-item>

+ 6 - 5
src/views/project/patentDetails/components/patentDetails.vue

@@ -99,8 +99,8 @@
                 <div class="patent-articles-option">
                   <el-tabs v-model="activeOption" type="card">
                     <el-tab-pane label="标引" name="PatentField"></el-tab-pane>
-                    <el-tab-pane label="注释" name="PatentAnnotation"
-                      :disabled="!($permission('/workspace/details/notes') && $r(projectId, [1, 2]))"></el-tab-pane>
+                    <!-- <el-tab-pane label="注释" name="PatentAnnotation"
+                      :disabled="!($permission('/workspace/details/notes') && $r(projectId, [1, 2]))"></el-tab-pane> -->
                   </el-tabs>
                 </div>
               </el-header>
@@ -231,6 +231,9 @@ export default {
           value: 'PatentPDF',
           label: '说明书'
         },
+        
+      ],
+      menuList2: [
         {
           value: 'Permit',
           show: this.$permission('/workspace/patent/worth') ? false : true,
@@ -245,9 +248,7 @@ export default {
           value: 'patentWorth',
           show: this.$permission('/workspace/patent/worth') ? false : true,
           label: '价值曲线'
-        }
-      ],
-      menuList2: [
+        },
         {
           value: 'Examination',
           label: '审查历史'

+ 1 - 1
src/views/report/InvalidResponse/components/dialog/addEvidenceReason.vue

@@ -318,7 +318,7 @@ export default {
             }
             this.$api.addEvidenceReason(params).then(response=>{
                 if(response.code == 200){
-                    this.$message('添加成功')
+                    this.$message.success('添加成功')
                     this.$emit('save',true)
                     this.btnLoading = false
                     this.handleClose()

+ 46 - 1
src/views/report/InvalidResponse/components/dialog/claimAndFeatureHistory.vue

@@ -39,7 +39,9 @@
                                 <el-button type="text" size="small" v-if="scope.$index!=0 && scope.$index==tableData.length-1 && scope.row.operate != 1" @click="edit(scope.row)"> 编辑 </el-button>
                                 <el-button type="text" size="small" v-if="scope.$index==tableData.length-1 && scope.row.times!=2" @click="add(scope)"> 添加第{{ ifSecondInvalid?'2':'1' }}次{{type==1?'权要':'特征'}}修改 </el-button>
                             </div>
-                            
+                            <div v-if="scope.row.operate == 1">
+                                <el-button type="text" size="small" @click="del(scope.row)">撤销</el-button>
+                            </div>
                         </div>
                     </template>
                 </el-table-column>
@@ -272,6 +274,49 @@ export default {
             edit:true
         }
         this.tableData.splice(index+1,0,obj)
+    },
+    del(row){
+        this.$confirm('确认删除本条数据吗?', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+        }).then(() => {
+            if(this.type == 1){
+                this.cancelRemoveClaims(row)
+            }else if(this.type == 2){
+                this.cancelRemoveFeature(row)
+            }
+        })
+        
+    },
+    cancelRemoveClaims(row){
+        var params = {
+            claimId:row.claimId
+        }
+        this.$api.cancelRemoveClaims(params).then(response=>{
+            if(response.code == 200){
+                this.$message.success('撤销成功')
+                this.getData()
+                this.$emit('save','claim')
+            }
+        }).catch(error=>{
+            this.$message.success('撤销失败')
+        })
+    },
+    cancelRemoveFeature(row){
+        var params = {
+            featureId:row.featureId
+        }
+        this.$api.cancelRemoveFeature(params).then(response=>{
+            if(response.code == 200){
+                this.$message.success('撤销成功')
+                this.getData()
+                this.updateMessage()
+            }
+        }).catch(error=>{
+            this.$message.success('撤销失败')
+            
+        })
     }
 
   },

+ 2 - 2
src/views/report/InvalidResponse/components/reasonsAndEvidence/details.vue

@@ -495,13 +495,13 @@
                             </div>
                         </div>
                     </div>
-                    <template v-if="!ifSecondInvalid">
+                    <template v-if="!ifSecondInvalid || !(item.secondEvidenceReason&&item.secondEvidenceReason.evidenceList && item.secondEvidenceReason.evidenceList.length>0)">
                         <div class="content content_item">
                             <div>
                                 <div class="left">复审委意见结论</div>
                                 <div class="right">
                                     <div v-if="edit">
-                                        <el-select v-model="literature.erRbSummary"  @change="(val)=>updateEvidenceMessage(val,'rbSummary',item.secondEvidenceReason)" placeholder="请选择">
+                                        <el-select v-model="literature.erRbSummary"  @change="(val)=>updateEvidenceMessage(val,'rbSummary',item)" placeholder="请选择">
                                             <el-option label="认可请求人意见"  value="认可请求人意见"></el-option>
                                             <el-option label="认可权利人意见"  value="认可权利人意见"></el-option>
                                             <el-option label="均不认可"  value="均不认可"></el-option>

+ 34 - 15
src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue

@@ -210,10 +210,11 @@
                         <div>
                             <template v-if="!getClaimDel(scope.row) || !getFeatureDel(scope.row)">
                                 <el-button @click="manageInvalidEvidence(scope.row)" type="text" size="small">管理{{ifSecondInvalid?'第二次':''}}无效证据</el-button>
-                                <el-button v-if="scope.row.proofGroupDescription" @click="remove(scope.row)" type="text" size="small">删除</el-button> 
+                                <el-button v-if="scope.row.proofGroupDescription" @click="remove(scope.row)" type="text" size="small">删除组合</el-button> 
                             </template>
                             <el-button @click="details(scope)" type="text" size="small" v-if="showDetails(scope)">详情</el-button>
                             <el-button @click="details(scope)" type="text" size="small" v-else>关闭详情</el-button>
+                            <el-button type="text" size="small" @click="removeInvalidStatutes(scope.row)">删除法条</el-button>
                         </div>
                     </template>
                 </el-table-column>
@@ -224,7 +225,7 @@
     </el-container>
     <add-InvalidResponse ref="addInvalidResponse" :projectId="projectId" :tableData="tableData" :ifSecondInvalid="ifSecondInvalid" @save="getList"></add-InvalidResponse>
     <add-EvidenceReason ref="addEvidenceReason" :projectId="projectId" @save="getList" :ifSecondInvalid="ifSecondInvalid"></add-EvidenceReason>
-    <claimAndFeatureHistory ref="claimAndFeatureHistory" @save="getList" :ifSecondInvalid="ifSecondInvalid"></claimAndFeatureHistory>
+    <claimAndFeatureHistory ref="claimAndFeatureHistory" @save="updateMessage" :ifSecondInvalid="ifSecondInvalid"></claimAndFeatureHistory>
     <ReviewCommittee ref="ReviewCommittee" :projectId="projectId" :ifSecondInvalid="ifSecondInvalid" @save="getList"></ReviewCommittee>
     <addFeature ref="addFeature" :projectId="projectId" :ifSecondInvalid="ifSecondInvalid" @save="getList"></addFeature>
 
@@ -286,6 +287,14 @@ export default {
     this.getClaims()
   },
   methods: {
+    updateMessage(val){
+        if(val){
+            if(val == 'claim'){
+               this.getClaims() 
+            }
+            this.getList()
+        }
+    },
     getClaims(){
         var params = {
             projectId:this.projectId
@@ -395,19 +404,6 @@ export default {
     },
     //给权要添加特征
     addClaimFeature(row){
-        // var params = {
-        //     claimId:row.claimId,
-        //     featureText:'',
-        //     gen:this.ifSecondInvalid?2:1,
-        //     common:''
-        // }
-        // this.$api.addFeatureGroupBatch(params).then(response=>{
-        //     if(response.code == 200){
-        //         this.$message.success('特征添加成功')
-        //     }
-        // }).catch(error=>{
-        //     this.$message.error('特征添加失败')
-        // })
         var form = {
             claimId:row.claimId
         }
@@ -459,6 +455,29 @@ export default {
         
     
     },
+    removeInvalidStatutes(row){
+        if(row.evidenceReasonId || row.secondEvidenceReasonId){
+            this.$message.warning('该法条下存在无效证据,无法删除')
+            return false
+        }
+        this.$confirm('确认删除本条数据吗?', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+        }).then(() => {
+            var params = {
+                id:row.id
+            }
+            this.$api.removeInvalidStatutes(params).then(response=>{
+                if(response.code == 200){
+                    this.$message.success('删除成功')
+                    this.getList()
+                }
+            }).catch(error=>{
+                this.$message.error('删除失败')
+            })
+        })
+    },
     //获取无效理由和证据
     async getList(){
         var params = {

+ 56 - 19
src/views/report/components/dialog/addAndEditReport.vue

@@ -95,12 +95,12 @@
               <el-input v-model="form.cronDescription" type="textarea" placeholder="请输入结论论述"></el-input>
             </el-form-item>
             <el-form-item label="后续跟进事项" v-if="$permission('/rms/matter')" prop="followUps">
-              <span v-if="form.followUps"><span v-for="item in form.followUps" :key="item.followUpName"
-                  style="margin-right:10px">{{ item.followUpName }}</span></span>
+              <span v-if="form.followUps"><span v-for="item in form.followUps" :key="item.name"
+                  style="margin-right:10px">{{ item.name }}</span></span>
               <span>
-                <el-popover ref="popover" placement="bottom" @hide="hidePopover" @show="showPopover" trigger="click">
+                <el-popover ref="popover" placement="bottom" @hide="hidePopover" trigger="click">
                   <div>
-                    <addMatter :type="matterType" :sign="matterSign" @value="getMatter"></addMatter>
+                    <addMatter :type="matterType" ref="addMatter"></addMatter>
                   </div>
                   <el-button slot="reference">添加后续事项</el-button>
                 </el-popover>
@@ -280,7 +280,7 @@
 
 <script>
 import { mapGetters } from 'vuex'
-import addMatter from './addMatter.vue'
+import addMatter from '../matter/addMatters.vue'
 import ClientTable from '@/views/client'
 import addFlowPath from '@/views/report/InvalidResponse/components/dialog/editFlowPath.vue'
 export default {
@@ -693,8 +693,26 @@ export default {
         this.personnelList.queryParams.id = null
       }
       this.getPermissionPersonnel()
-      if(this.form.signPatentNo){
-        this.getPatentNo()
+
+      if(form.track){
+        this.title = '添加追踪报告'
+        this.copyList = this.dictMessage[this.reportAsDicItemCopy[this.form.reportType]]
+        if(this.copyList){
+          var index = this.copyList.findIndex(item=>{
+            return item.label == '标引信息'
+          })
+          if(index!=-1){
+            this.copyIndex = this.copyList[index]
+          }
+        }
+        
+        var arr = this.copyList?this.copyList.map(item=>{return item.value}):[]
+        this.$set(this.form,'copyIds',arr)
+      }
+      if(!this.form.id){
+        if(this.form.signPatentNo && !form.track){
+          this.getPatentNo()
+        }
       }
       // this.getEventList()
       this.showDialog = true
@@ -769,15 +787,15 @@ export default {
         let params = {
           reportType: this.form.reportType
         }
-        await this.$api.queryCrons(params).then(res => {
-          if (res.code == 200) {
-            this.conclusion = res.data.data
-          }
-        }).catch(error => {
-          this.conclusion = []
-          this.$message.error(error.message)
-        })
-        // this.conclusion = this.dictMessage[this.reportAsDicItem[this.form.reportType]]
+        // await this.$api.queryCrons(params).then(res => {
+        //   if (res.code == 200) {
+        //     this.conclusion = res.data.data
+        //   }
+        // }).catch(error => {
+        //   this.conclusion = []
+        //   this.$message.error(error.message)
+        // })
+        this.conclusion = this.dictMessage[this.reportAsDicItem[this.form.reportType]]
         this.matterType = 2
       } else {
         this.rules.headId[0].required = true
@@ -926,9 +944,17 @@ export default {
         this.form.systemFileList.splice(index, 1)
       }
     },
-
-
-
+    hidePopover(){
+      var a = this.$refs.addMatter.emitData()
+      if(a){
+        this.$set(this.form,'followUps',a)
+      }else{
+        return false
+      }
+    },
+    validMatter(){
+      return this.$refs.addMatter.emitData()
+    },
     //提交填写的信息
     submit() {
       this.$refs.reportForm.validate((valid) => {
@@ -945,6 +971,17 @@ export default {
             }
             this.form.fileGuids = guids
           // this.$commonJS.allUploadFile(this.form)
+         
+          //判断报告是否是已完成的
+          if(this.form.status == 3){
+            var validMatters = this.validMatter()
+            if(validMatters){
+              this.form.followUps = validMatters
+            }else{
+              return false
+            }
+          }
+          
           // 事件及调查类型处理
           if (this.form.scenarioIds && this.form.scenarioIds.length > 0) {
             var scenarioIds = JSON.parse(JSON.stringify(this.form.scenarioIds))

+ 0 - 357
src/views/report/components/dialog/addMatter.vue

@@ -1,357 +0,0 @@
-<template>
-  <div>
-    <div v-if="type == 1">
-      <el-form
-        :model="formData[0]"
-        :rules="rules"
-        ref="ruleForm"
-        label-width="100px"
-        class="demo-ruleForm"
-      >
-        <el-form-item label="名称" prop="name">
-          <el-input
-            v-model="formData[0].name"
-            autocomplete="off"
-            placeholder="请输入后续跟进事项名称"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="描述" prop="remark">
-          <el-input
-            type="textarea"
-            :rows="1"
-            v-model="formData[0].remark"
-            autocomplete="off"
-            placeholder="请输入后续跟进事项描述"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="处理人" prop="handler">
-          <el-input
-            v-model="formData[0].handler"
-            placeholder="请输入后续跟进事项处理人"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="协办人" prop="synery">
-          <el-input
-            v-model="formData[0].synery"
-            placeholder="请输入后续跟进事项协办人"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="期限" prop="deadline">
-          <el-date-picker
-            style="width: 100%"
-            v-model="formData[0].deadline"
-            type="datetime"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            placeholder="选择日期时间"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item>
-            <div style="display:flex;justify-content:center" v-if="formData[0].status != '已完成'&& $reportPermission(reportId,[0,1])">
-                <el-button type="primary" @click="submitForm()" size="small" style="width:100px" :loading="btnLoading">保存</el-button>
-                <el-button  @click="resetForm()" size="small" style="width:100px">取消</el-button>
-            </div>
-          
-        </el-form-item>
-      </el-form>
-    </div>
-    <div v-else :class="reportId?'item1':'item2'" >
-      <el-table :data="formData" style="width: 100%" class="twj-table">
-        <el-table-column prop="name" label="名称" align="center" min-width="150px">
-            <template slot="header">
-                <div>
-                    <span>名称<span style="color:red;"> *</span></span>
-                </div>
-            </template>
-          <template slot-scope="scope">
-            <div>
-                <!-- <el-form :model="scope.row" :rules="rules" ref="ruleForm" class="demo-ruleForm">
-                    <el-form-item prop="name" style="margin:0"> -->
-                        <el-input
-                            v-model="scope.row.name"
-                            autocomplete="off"
-                            placeholder="请输入名称"
-                        ></el-input>
-                    <!-- </el-form-item>
-                </el-form> -->
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="remark" label="描述" align="center" width="250px">
-          <template slot-scope="scope">
-            <div>
-              <el-input
-                type="textarea"
-                :rows="1"
-                v-model="scope.row.remark"
-                autocomplete="off"
-                placeholder="请输入描述"
-              ></el-input>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="handler" label="处理人" align="center" min-width="150px">
-          <template slot-scope="scope">
-            <div>
-              <el-input
-                v-model="scope.row.handler"
-                placeholder="请输入处理人"
-              ></el-input>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="synery" label="协办人" align="center" min-width="150px">
-          <template slot-scope="scope">
-            <div>
-              <el-input
-                v-model="scope.row.synery"
-                placeholder="请输入协办人"
-              ></el-input>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="deadline" label="期限" align="center" min-width="150px">
-          <template slot-scope="scope">
-            <div>
-              <el-date-picker
-                style="width: 100%"
-                v-model="scope.row.deadline"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="选择日期时间"
-              >
-              </el-date-picker>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" align="" width="100px">
-          <template slot-scope="scope">
-            <div>
-              <i @click="addRow(scope)" class="el-icon-plus btn"></i>
-              <i @click="deleteRow(scope)" v-if="scope.$index!=0" class="el-icon-close btn"></i>
-            </div>
-          </template>
-        </el-table-column>
-      </el-table>
-      <div style="display:flex;justify-content: center;margin-top:20px" v-if="reportId && (sign != false && sign != true)">
-        <el-button type="primary" @click="submitForm1()" size="small" style="width:100px" :loading="btnLoading">保存</el-button>
-        <el-button size="small" @click="resetForm()" style="width:100px">取消</el-button>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-export default {
-  props: ["type", "reportId",'sign','row'],
-  data() {
-    return {
-      btnLoading:false,
-      formData: [
-        {
-          reportId:this.reportId,
-            name:'',
-            remark:'',
-            handler:'',
-            synery:'',
-            deadline:''
-        }
-      ],
-      rules: {
-        name: [
-          {
-            required: true,
-            message:'请输入后续跟进事项名称',
-            trigger: "blur",
-          },
-        ],
-      },
-    };
-  },
-  watch:{
-    type(){
-        this.getType()
-    },
-    sign(val){
-      if(val){
-        this.$emit('value',this.formData)
-      }
-    },
-  },
-  mounted() {
-    this.getType()
-  },
-  methods: {
-    //获取type类型
-    getType(){
-      if(this.row){
-        this.formData = [this.row]
-        return false
-      }
-        if(this.type == 2){
-            for(var i = 0;i<2;i++){
-                this.formData.push(
-                  {
-                    reportId:this.reportId,
-                    name:'',
-                    remark:'',
-                    handler:'',
-                    synery:'',
-                    deadline:''
-                  }
-                )
-            }
-        }else{
-          this.formData= [ 
-            {
-              reportId:this.reportId,
-              name:'',
-              remark:'',
-              handler:'',
-              synery:'',
-              deadline:''
-            }
-          ]
-        }
-    },
-    //添加后续跟进事项
-    submitForm() {
-      this.$refs.ruleForm.validate((valid) => {
-        if (valid) {
-          this.btnLoading = true
-          if(this.row){
-            this.$api.updateMatters(this.formData).then(response=>{
-              if(response.code == 200){
-                this.btnLoading = false
-                this.$message.success('后续跟进事项更新成功')
-                this.resetForm()
-              }
-            }).catch(error=>{
-              this.btnLoading = false
-                this.$message.error('后续跟进事项更新失败')
-            })
-          }else{
-            this.$api.addMatters(this.formData).then(response=>{
-              if(response.code == 200){
-                this.btnLoading = false
-                this.$message.success('后续跟进事项添加成功')
-                this.resetForm()
-              }
-            }).catch(error=>{
-              this.btnLoading = false
-                this.$message.error('后续跟进事项添加失败')
-            })
-          }
-            
-        } else {
-          return false;
-        }
-      });
-    },
-    submitForm1(){
-      try{
-          var list = []
-          var b = false
-          var keyList={
-            name:'',
-            remark:'',
-            handler:'',
-            synery:'',
-            deadline:''
-          }
-          this.formData.forEach(item=>{
-              var a = false
-              for(let key in keyList){
-                  if(item[key] !='' && item[key] != null){
-                      a = true
-                  }
-              }
-              if(a == true){
-                if(item.name!='') {
-                      b=true
-                      list.push(item)
-                }else{
-                      b=false
-                      throw new Error()
-                }
-              }
-          })
-          this.$api.addMatters(list).then(response=>{
-            if(response.code == 200){
-              this.btnLoading = false
-              this.$message.success('后续跟进事项添加成功')
-                this.resetForm()
-            }
-          }).catch(error=>{
-              this.btnLoading = false
-              this.$message.error('后续跟进事项添加失败')
-          })
-      }catch(e){
-        this.$message.error('后续跟进事项名称不能为空')
-      }
-        
-    },
-    //取消
-    resetForm() {
-        if(this.type ==1 ){
-             this.$refs.ruleForm.resetFields();
-        }
-        this.formData=[
-            {
-                name:'',
-                remark:'',
-                handler:'',
-                synery:'',
-                deadline:''
-            }
-        ]
-        this.$emit('dialog',false)
-     
-    },
-    //添加跟进事项
-    addRow() {
-        this.formData.push(
-            {
-              reportId:this.reportId,
-              name:'',
-              remark:'',
-              handler:'',
-              synery:'',
-              deadline:''
-            }
-        )
-    },
-    //删除跟进事项
-    deleteRow(row) {
-        this.formData.splice(row.$index,1)
-    },
-  },
-};
-</script>
-<style>
-.twj-table td.el-table__cell, .twj-table th.el-table__cell.is-leaf{
-    border:none
-}
-.twj-table::before {
-    background-color: transparent;
-}
-</style>
-<style lang="scss" scoped>
-.item1{
-  max-height: 500px;
-  overflow: auto;
-}
-.item2{
-  max-height: 350px;
-  overflow: auto;
-}
-.btn {
-  color: black;
-  margin-left: 10px;
-  font-size: 18px;
-  text-align: center;
-  cursor: pointer;
-}
-.btn:hover {
-  color: aqua;
-}
-</style>

+ 145 - 0
src/views/report/components/dialog/cronConclusion.vue

@@ -0,0 +1,145 @@
+<template>
+    <div>
+        <el-dialog width="800px" title="添加核心结论" :visible.sync="showDialog" :before-close="resetForm">
+            <el-form :model="form" label-width="120px">
+                <el-form-item label="核心结论">
+                <el-checkbox-group v-model="form.cronIds">
+                    <el-checkbox v-for="item in conclusion" :key="item.value" :label="item.value">{{ item.label }}</el-checkbox>
+                </el-checkbox-group>
+                </el-form-item>
+                <el-form-item label="结论论述" >
+                <el-input v-model="form.cronDescription" type="textarea" placeholder="请输入结论论述"></el-input>
+                </el-form-item>
+                <el-form-item label="后续跟进事项" v-if="$permission('/rms/matter')">
+                <span v-if="form.followUps"><span v-for="item in form.followUps" :key="item.name" style="margin-right:10px">{{ item.name}}</span></span> 
+                <span>
+                    <el-popover
+                        ref="popover"
+                        placement="bottom"
+                        @hide="hidePopover"
+                        trigger="click">
+                        <div>
+                            <addMatter :type="matterType" ref="addMatter"></addMatter>
+                        </div>
+                        <el-button slot="reference">添加后续事项</el-button>
+                    </el-popover>
+                </span>
+                
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="submitForm()" size="small" style="width:100px" :loading="btnLoading">保存</el-button>
+                <el-button  @click="resetForm()" size="small" style="width:100px">取消</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import addMatter from "../matter/addMatters.vue";
+export default {
+    components:{
+        addMatter,
+    },
+    data() {
+        return {
+            showDialog:false,
+            form:{
+                cronIds:[]
+            },
+            matterSign:false,
+            matterType:null,
+            btnLoading:false,
+            conclusion:[],
+            reportAsDicItem:{
+                "0":"INVALID_ASSESS",
+                "1":"THIRD_ASSESS",
+                "2":"STABILITY_ASSESS",
+                "3":"FTO_ASSESS",
+                "4":"TORT_ASSESS",
+                "5":"AVOID_ASSESS",
+                "7":"REINVALID_ASSESS",
+            },
+        }
+    },
+    computed: {
+        dictMessage() {
+            return this.$store.state.dictMessage.dictMessage
+        },
+    },
+    mounted() {
+    },
+    methods: {
+        //打开弹窗
+        open(row){
+            this.matterType = 2
+            this.form = {
+                cronIds:[],
+                ...row
+            }
+            this.conclusion = this.dictMessage[this.reportAsDicItem[row.reportType]]
+            this.showDialog = true
+        },
+        //隐藏popover
+        hidePopover(){
+            var a = this.$refs.addMatter.emitData()
+            if(a){
+                this.$set(this.form,'followUps',a)
+            }else{
+                return false
+            }
+        },
+        validMatter(){
+            return this.$refs.addMatter.emitData()
+        },
+
+        //添加核心结论
+        submitForm(){
+            this.form.type = 2//项目类型(1专利数据库 2报告 3专利挖掘项目)
+          // 判断文件是否都上传完毕
+          var guids = this.$commonJS.checkUploadFile(this.form.systemFile)
+            if(!guids){
+                return false
+            }
+            this.form.fileGuids = guids
+          // this.$commonJS.allUploadFile(this.form)
+         
+          //判断报告是否是已完成的
+        this.$refs.addMatter.submitForm1()
+          this.form.status = 3
+          // 事件及调查类型处理
+          if (this.form.scenarioIds && this.form.scenarioIds.length > 0) {
+            var scenarioIds = JSON.parse(JSON.stringify(this.form.scenarioIds))
+          }
+          if (this.form.eventId) {
+            this.form.events = []
+            this.form.scenarioIds = []
+            this.form.matterIds.forEach(item => {
+              this.form.events.push(
+                {
+                  matterId: item,
+                  scenarioId: scenarioIds[0],
+                  eventId: this.form.eventId
+                }
+              )
+            })
+          }
+          let formData = this.form
+            this.$api.updateReportProject(formData).then(response=>{
+                if(response.code == 200){
+                    this.$message.success('核心结论添加成功')
+                    this.resetForm()
+                    this.$emit('save',true)
+                }
+            }).catch(error=>{
+                this.$message.error('核心结论添加失败')
+            })
+        },
+        //关闭弹窗
+        resetForm(){
+            this.matterType=null
+            this.showDialog = false
+        },
+
+    },
+}
+</script>

+ 137 - 0
src/views/report/components/dialog/exportReport.vue

@@ -0,0 +1,137 @@
+<template>
+  <div>
+    <el-dialog width="1000px" title="选择模板" :visible.sync="reportTemplate" :before-close="close" >
+        <div  v-loading="loadingTemplate" element-loading-text="报告导出中..." element-loading-spinner="el-icon-loading">
+            <div class="height_100">
+                <el-container>
+                    <el-main>
+                        <el-table
+                            :data="tableData"
+                            border
+                            v-loading="loading"
+                            style="width: 100%">
+                            <el-table-column
+                                label="选择"
+                                width="180"
+                                align="center">
+                                <template slot-scope="scope">
+                                    <div>
+                                        <el-radio v-model="templateId" :label="scope.row.id">{{""}}</el-radio>
+                                    </div>
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                prop="templateName"
+                                label="模板名称"
+                                align="center">
+                            </el-table-column>
+                            <el-table-column
+                                prop="reportType"
+                                label="所属报告类型"
+                                align="center">
+                                <template slot-scope="scope">
+                                    <div>
+                                        {{dictMessage[scope.row.reportType]}}
+                                    </div>
+                                </template>
+                            </el-table-column>
+                            <!-- <el-table-column
+                                prop="personName"
+                                label="创建人"
+                                align="center">
+                            </el-table-column>
+                            <el-table-column
+                                prop="createTime"
+                                label="创建日期"
+                                align="center">
+                            </el-table-column> -->
+                        </el-table>
+                    </el-main>
+                    <!-- <el-footer class="pagination">
+                        <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total" @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
+                    </el-footer> -->
+                </el-container>
+            </div>
+            <div slot="footer" class="dialog-footer" style="display: flex;justify-content: flex-end;">
+                <el-button @click="close">取 消</el-button>
+                <el-button type="primary" @click="submitExport" :loading="loadingTemplate">确 定</el-button>
+            </div>
+        </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+        reportTemplate:false,
+        loadingTemplate:false,
+        tableData:[],
+        templateId:'',
+        btnLoading:false,
+        queryParams:{
+            current:1,
+            size:10,
+            reportType:''
+        },
+        total:0,
+        loading:false,
+        projectId:''
+    };
+  },
+  watch: {},
+  computed: {
+    dictMessage() {
+        var a = this.$store.state.dictMessage.dictMessage.REPORT_TYPE
+        var b = []
+        a.forEach(item => {
+            b[item.value] = item.label
+        });
+        return b
+    },
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    open(row){
+        this.projectId = row.id
+        this.queryParams = {
+            current:1,
+            size:10,
+            reportType:row.reportType
+        }
+        this.getList()
+        this.reportTemplate = true
+    },
+    close(){
+        this.reportTemplate = false
+    },
+    handleCurrentChange(val){
+        this.queryParams.current = val
+        this.getList()
+    },
+    getList(){
+        this.loading = true
+        this.$api.queryTempleByType(this.queryParams).then(response=>{
+            if(response.code == 200){
+                this.tableData = response.data
+                // this.total = response.data.total
+                this.loading = false
+            }
+        }).catch(error=>{
+            this.tableData = []
+            // this.total = 0
+            this.loading = false
+        })
+    },
+    submitExport(){
+        this.loadingTemplate = true
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 39 - 4
src/views/report/components/index.vue

@@ -53,6 +53,8 @@
     <fields ref="field" type="reportProject" @getFieldList="getFieldList"></fields>
     <Field-Drawer ref="FieldDrawer"></Field-Drawer>
     <reportFileDrawer ref="reportFileDrawer"></reportFileDrawer>
+    <cronConclusion ref="cronConclusion" @save="getList"></cronConclusion>
+    <exportReport ref="exportReport"></exportReport>
   </div>
 </template>
 
@@ -65,6 +67,8 @@ import CreateReport from './dialog/addAndEditReport.vue'
 import fields from '@/views/components/dialog/fields.vue';
 import FieldDrawer from '@/views/components/drawer/Field.vue'
 import reportFileDrawer from './drawer/reportFileDrawer.vue'
+import cronConclusion from './dialog/cronConclusion.vue'
+import exportReport from './dialog/exportReport.vue'
 export default {
   components: {
     Table,
@@ -75,6 +79,8 @@ export default {
     fields,
     FieldDrawer,
     reportFileDrawer,
+    cronConclusion,
+    exportReport
   },
   props: {
     isOperate: '',
@@ -87,10 +93,10 @@ export default {
     return {
       //视图类型
       viewTypes: [
-        {
-          name: '可视化',
-          component: 'visual'
-        },
+        // {
+        //   name: '可视化',
+        //   component: 'visual'
+        // },
         {
           name: '列表',
           component: 'Table'
@@ -533,6 +539,35 @@ export default {
           break
       }
     },
+    //分享
+    share(row){
+      this.drawer = true
+    },
+    //导出报告
+    exportReport(row){
+      this.$refs.exportReport.open(row)
+    },
+     //追踪报告
+   trackReport(row){
+      var form = JSON.parse(JSON.stringify(row))
+      this.$set(form,'associateReportName',row.volumeNumber?row.volumeNumber:row.name)
+      this.$set(form,'associateReportId',row.id)
+      this.$set(form,'cronIds',[])
+      if(isNaN((row.name).substring((row.name).length-1))){
+        form.name = row.name + '-V1'
+      }else{
+       var a= Number((row.name).substring((row.name).length-1)) + 1
+       form.name = (row.name).substring(0,(row.name).length-1) + a
+      }
+      form.status = 1
+      form.id = null
+      form.track = true
+      this.$refs.ReportForm.open(form)
+    },
+    //完成报告
+    completeReport(row){
+      this.$refs.cronConclusion.open(row)
+    },
     //无效证据
     toInvalidEvidence(row){
       this.$router.push({

+ 13 - 3
src/views/report/components/matter/addMatters.vue

@@ -134,6 +134,9 @@ export default {
     this.getType()
   },
   methods: {
+    emitData(){
+      return this.validMatter()
+    },
     //获取type类型
     getType() {
       if (this.row) {
@@ -200,7 +203,7 @@ export default {
         }
       });
     },
-    submitForm1() {
+    validMatter(){
       try {
         var list = []
         var b = false
@@ -228,6 +231,15 @@ export default {
             }
           }
         })
+        return list
+      } catch (e) {
+        this.$message.error('后续跟进事项名称不能为空')
+        return false
+      }
+    },
+    submitForm1() {
+      var list = this.validMatter()
+      if(list){
         this.$api.addFollowUp(list).then(response => {
           if (response.code == 200) {
             this.btnLoading = false
@@ -238,8 +250,6 @@ export default {
           this.btnLoading = false
           this.$message.error('后续跟进事项添加失败')
         })
-      } catch (e) {
-        this.$message.error('后续跟进事项名称不能为空')
       }
 
     },