Browse Source

添加专利检索模块

zhuliu 2 years ago
parent
commit
daffb02f64
45 changed files with 1989 additions and 226 deletions
  1. 41 0
      RMS-FrontEnd/src/api/importPatent.js
  2. 3 1
      RMS-FrontEnd/src/api/index.js
  3. 58 1
      RMS-FrontEnd/src/router/index.js
  4. 5 1
      RMS-FrontEnd/src/store/modules/patent.js
  5. 25 0
      RMS-FrontEnd/src/utils/directives.js
  6. 18 20
      RMS-FrontEnd/src/views/components/articles/ContrastIndex.vue
  7. 58 14
      RMS-FrontEnd/src/views/components/articles/components/PatentBasic.vue
  8. 57 1
      RMS-FrontEnd/src/views/components/articles/components/PatentFamily.vue
  9. 30 3
      RMS-FrontEnd/src/views/components/articles/components/PatentImage.vue
  10. 24 4
      RMS-FrontEnd/src/views/components/articles/components/PatentInstruction.vue
  11. 93 8
      RMS-FrontEnd/src/views/components/articles/components/PatentPDF.vue
  12. 28 6
      RMS-FrontEnd/src/views/components/articles/components/PatentRight.vue
  13. 28 7
      RMS-FrontEnd/src/views/components/articles/components/PatentStatus.vue
  14. 1 1
      RMS-FrontEnd/src/views/components/articles/components/history/invalid.vue
  15. 83 3
      RMS-FrontEnd/src/views/components/articles/components/mixins.js
  16. 19 22
      RMS-FrontEnd/src/views/components/articles/index.vue
  17. 1 1
      RMS-FrontEnd/src/views/components/common/PatentDetails/index.vue
  18. 97 14
      RMS-FrontEnd/src/views/components/common/mixins.js
  19. 1 1
      RMS-FrontEnd/src/views/components/gaoliang/components/pizhu.vue
  20. 2 1
      RMS-FrontEnd/src/views/components/import/PatentNoImport/download.vue
  21. 4 1
      RMS-FrontEnd/src/views/components/import/PatentNoImport/index.vue
  22. 169 61
      RMS-FrontEnd/src/views/components/import/conditionImport/components/projectListDialog.vue
  23. 6 2
      RMS-FrontEnd/src/views/components/import/conditionImport/index.vue
  24. 14 11
      RMS-FrontEnd/src/views/components/import/conditionImport/patentDetails/patentDetail.vue
  25. 6 5
      RMS-FrontEnd/src/views/components/import/conditionImport/patentDetails/patentIndex.vue
  26. 3 2
      RMS-FrontEnd/src/views/components/import/conditionImport/search.vue
  27. 17 14
      RMS-FrontEnd/src/views/components/import/conditionImport/searchResult.vue
  28. 4 1
      RMS-FrontEnd/src/views/components/import/conditionImport/searchResultIndex.vue
  29. 373 0
      RMS-FrontEnd/src/views/components/import/conditionImport/view/Abstract.vue
  30. 89 0
      RMS-FrontEnd/src/views/components/import/conditionImport/view/Picture.vue
  31. 302 0
      RMS-FrontEnd/src/views/components/import/conditionImport/view/Table.vue
  32. 117 0
      RMS-FrontEnd/src/views/components/import/conditionImport/view/TableSort.vue
  33. 3 2
      RMS-FrontEnd/src/views/components/import/excelImport/importPatent.vue
  34. 4 1
      RMS-FrontEnd/src/views/components/import/excelImport/index.vue
  35. 21 1
      RMS-FrontEnd/src/views/layout/components/UserBar.vue
  36. 69 0
      RMS-FrontEnd/src/views/layout/components/setStyle.vue
  37. 11 1
      RMS-FrontEnd/src/views/report/FTO/FTOPage/ChosePatent.vue
  38. 11 1
      RMS-FrontEnd/src/views/report/Invalid/InvalidPage/ChosePatent.vue
  39. 1 1
      RMS-FrontEnd/src/views/report/InvalidResponse/components/FileDetails/index.vue
  40. 17 3
      RMS-FrontEnd/src/views/report/InvalidResponse/components/InvalidIndex.vue
  41. 1 1
      RMS-FrontEnd/src/views/report/InvalidResponse/components/TableField.vue
  42. 25 4
      RMS-FrontEnd/src/views/report/components/CreateReport.vue
  43. 29 1
      RMS-FrontEnd/src/views/report/components/addPatentList/addPatent.vue
  44. 10 3
      RMS-FrontEnd/src/views/report/components/mixins.js
  45. 11 1
      RMS-FrontEnd/src/views/report/reportDetails/components/SelectedPatent.vue

+ 41 - 0
RMS-FrontEnd/src/api/importPatent.js

@@ -0,0 +1,41 @@
+import axios from '@/utils/axios'
+
+export default {
+ /**
+   * 检索专利
+   */
+ patentSelectImport(params) {
+    return axios.post('/v2/patentStar/select', params)
+  },
+  /**
+   * 获取专利部分内容(1.权要 2.说明书文本 3.说明书pdf 4.摘要附图)
+   */
+ getPatentPart(params) {
+    return axios.post('/v2/patentStar/getPatentPart', params)
+  },
+
+  /**
+   * 新增检索历史
+  */
+  addRetrieveRecord(params) {
+    return axios.post('/v2/RetrieveRecord/addRetrieveRecord', params)
+  },
+  /**
+   * 查询检索历史
+  */
+  queryRetrieveRecord(params) {
+    return axios.post('/v2/RetrieveRecord/queryRetrieveRecord', params)
+  },
+  /**
+   * 更新检索历史
+  */
+  updateRetrieveRecord(params) {
+    return axios.post('/v2/RetrieveRecord/updateRetrieveRecord', params)
+  },
+  /**
+   * 更新检索历史
+  */
+  deleteRetrieveRecord(params) {
+    return axios.post('/v2/RetrieveRecord/deleteRetrieveRecord', params)
+  },
+}

+ 3 - 1
RMS-FrontEnd/src/api/index.js

@@ -9,6 +9,7 @@ import task from './task';
 import highlight from './highlight';
 import InvalidResponse from './InvalidResponse';
 import quartz from "./quartz";
+import importPatent from "./importPatent";
 
 export default {
   ...report,
@@ -20,5 +21,6 @@ export default {
   ...task,
   ...highlight,
   ...InvalidResponse,
-  ...quartz
+  ...quartz,
+  ...importPatent
 }

+ 58 - 1
RMS-FrontEnd/src/router/index.js

@@ -189,6 +189,7 @@ const routes = [
         },
         component:() => import('@/views/task/components/taskReportDetails.vue'),
       },
+      //excel导入
       {
         path: '/import',
         name:"import",
@@ -196,7 +197,63 @@ const routes = [
           aside: true,
           showHeader:true,
         },
-        component:() => import('@/views/components/import'),
+        // component:() => import('@/views/components/import'),
+        component:() => import('@/views/components/import/excelImport'),
+      },
+      //专利号导入
+      {
+        path: '/PatentNoImport',
+        name:"PatentNoImport",
+        meta:{
+          aside: true,
+          showHeader:true,
+        },
+        // component:() => import('@/views/components/import'),
+        component:() => import('@/views/components/import/PatentNoImport'),
+      },
+      //检索导入
+      {
+        path: '/conditionImport',
+        name:"conditionImport",
+        meta:{
+          title: '专利检索',
+          aside: true,
+          showHeader:true,
+        },
+        // component:() => import('@/views/components/import'),
+        component:() => import('@/views/components/import/conditionImport'),
+      },
+      //检索结果
+      {
+        path: '/searchResult',
+        name:"searchResult",
+        meta:{
+          title: '检索结果',
+          aside: true,
+          showHeader:true,
+        },
+        // component:() => import('@/views/components/import'),
+        component:() => import('@/views/components/import/conditionImport/searchResultIndex.vue'),
+      },
+      //检索专利详情
+      {
+        path: "/search/patentDetail",
+        meta: {
+          title: '专利详情',
+          aside: true,
+          showHeader:true,
+        },
+      component: () => import('@/views/components/import/conditionImport/patentDetails/patentIndex.vue'),
+      },
+      //任务清单
+      {
+        path: "/taskList",
+        meta: {
+          title: '任务清单',
+          aside: true,
+          showHeader:true,
+        },
+        component: () => import('@/views/components/task/taskIndex.vue'),
       },
       {
         path: '/SelectedPatent',

+ 5 - 1
RMS-FrontEnd/src/store/modules/patent.js

@@ -7,6 +7,7 @@ export default {
     menuLoading: false,
     highlight: {},
     queryData: [],
+    style: null,
     index:{
       color:'#ff0000',
       scratchType:2,
@@ -41,7 +42,10 @@ export default {
     },
     SET_PATENT_INDEX(state, index){
       state.index = index
-    }
+    },
+    SET_PATENT_STYLE(state, style) {
+      state.style = style
+    },
   },
 
   actions: {

+ 25 - 0
RMS-FrontEnd/src/utils/directives.js

@@ -213,10 +213,35 @@ const dragControllerDiv2=(el,binding)=> {
           return false;
         }
 };
+
+//下拉框懒加载
+ const SelectLazyLoading=(el,binding)=>{
+   
+        let SELECT_DOM = el.querySelector(
+          ".el-select-dropdown .el-select-dropdown__wrap"
+        );
+        if(!SELECT_DOM){
+            return false
+        }
+        SELECT_DOM.addEventListener("scroll", function () {
+            // scrollHeight:当前所有选项的高度
+          // scrollTop:滚动的距离
+          // clientHeight:下拉框的高度
+          let condition = this.scrollHeight - this.scrollTop - 1 <= this.clientHeight;
+          if (condition) {
+            binding.value();
+          }
+        });
+ }
+
+
+       
+
 const directives = {
     draggable,
     dragControllerDiv,
     dragControllerDiv1,
+    SelectLazyLoading
 };
 // 这种写法可以批量注册指令
 export default {

+ 18 - 20
RMS-FrontEnd/src/views/components/articles/ContrastIndex.vue

@@ -3,25 +3,12 @@
 
 <div class="patent-articles" >
     <el-container v-loading="loading">
-      <!-- <el-aside width="250px" class="patent-articles-menu">
-        <el-container>
-          <el-header style="height: 180px;">
-            <patent-list :patent-id="patentId" :project-id="projectId" @on-change="onChange" />
-          </el-header>
-          <el-main>
-            <patent-image v-if="patent.image" :project-id="projectId" :patent="patent" :patent-id="patentId" @refresh="getPatent(patentId)"></patent-image>
-          </el-main>
-        </el-container>
-      </el-aside> -->
       <el-container >
         <el-header class="patent-articles-title">
           <div class="patent-articles-title-box">
             <div style="position:relative">
               <img src="@/assets/visual/fixed.png" width="20px" height="20px" v-if="fix===true && !showEvidence" @click="qx" style="position:absolute;top:5px;left:5px"/>
               <img src="@/assets/visual/unfixed.png" width="20px" height="20px" v-if="fix===false && !showEvidence"  @click="gd" style="position:absolute;top:5px;left:5px"/>
-              <!-- <div>
-                 <patent-list :patent-id="patentId" :project-id="projectId" @on-change="onChange" />
-              </div> -->
                <div>
               <span v-html="getViewDom(patent.patentNo)"></span>
               <el-tag type="primary" effect="dark" size="mini" class="margin-left_10">{{ patent.simpleStatus }}</el-tag>
@@ -63,12 +50,12 @@
           <div class="patent-articles-content-left1" :style="{ width: showRight ? 'calc(100% - 321px)' : 'calc(100% - 21px)' }">
             <div class="dom1 box1" v-dragControllerDiv1 style="display:flex;width:100%">
               <div class="component left1" style="width:100%;overflow-y:auto;overflow-x: hidden;padding-bottom:10px" :style="{height:height}">
-                <component :is="componentName" v-on="$listeners" v-bind="$attrs" :type1='type' :isTrue="isTrue" @openContrast='openContrast'  :project-id="projectId" :patent="patent" :patent-id="patentId" :signPatentNo="signPatentNo" :patentNo="this.activeMenu == 'patentWorth'?[patentNo?patentNo:productPublicNo]:patentNo" :publicNo="publicNo" :domId="patentNo + '2'" :reportId="reportId" @refresh="getPatent(patent.patentNo)"></component>
+                <component :is="componentName" v-on="$listeners" v-bind="$attrs" :type1='type' :isTrue="isTrue" @openContrast='openContrast' :patent="patent" :patent-id="patentId" :signPatentNo="signPatentNo" :patentNo="this.activeMenu == 'patentWorth'?[patentNo?patentNo:productPublicNo]:patentNo" :publicNo="publicNo" :domId="patentNo + '2'" :reportId="reportId" :pdfType1="getPDFType()" @refresh="getPatent(patent.patentNo)"></component>
               </div>
               <div class="resize2" title="收缩侧边栏" v-show="(radio == 2 || radio == 3) && activeMenu != activeMenu2"><p><span>˙</span><span>˙</span><span>˙</span></p></div>
               <div class="resize1" title="收缩侧边栏" v-show="(radio == 4 || radio == 5) && activeMenu != activeMenu2"><span>⋮</span></div>
             <div v-show="radio != 1 && activeMenu != activeMenu2" class="mid1" :style="{height:(radio == 4 || radio == 5)?height:'280px'}"  style="width:450px;height:280px;border:1px solid #E4E7ED;margin:10px;overflow-y:auto;overflow-x: hidden;">
-              <component :is="activeMenu2"  v-bind="$attrs" :project-id="projectId" :patent="patent" :patent-id="patentId" :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" :sign="true"></component>
+              <component :is="activeMenu2"  v-bind="$attrs" :patent="patent" :patent-id="patentId" :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" :sign="true"></component>
             </div>
             </div>
           
@@ -79,15 +66,13 @@
                 <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="PatentKeywordsHighlight"></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>
               <el-main>
                 <keep-alive>
-                  <component :is="activeOption" :project-id="projectId" :patent-id="patentId" :publicNo="publicNo" :reportId="reportId" :patentNo1="patentNo"></component>
-                    <component :is="activeOption" :project-id="projectId" :patent-id="patentId" :publicNo="publicNo" :reportId="reportId" :patentNo1="patentNo"></component>
+                  <component :is="activeOption" :patent-id="patentId" :publicNo="publicNo" :reportId="reportId" :patentNo1="patentNo"></component>
+                    <component :is="activeOption" :patent-id="patentId" :publicNo="publicNo" :reportId="reportId" :patentNo1="patentNo"></component>
                 </keep-alive>
               </el-main>
             </el-container>
@@ -321,6 +306,19 @@ export default {
     
   },
   methods: {
+    //获取pdf类型
+    getPDFType() {
+      if (this.patent.pdf && this.patent.pdf.length > 0) {
+        var index = this.patent.pdf.findIndex(item => {
+            return item.type == 2
+          })
+          if (index != -1) {
+            return 2
+          } else {
+            return 1
+          }
+      }
+    },
      //获取需要跳转的批注
      getBiaoZhu(val) {
       if (val.scratchField.indexOf('摘要')!=-1) {
@@ -432,7 +430,7 @@ export default {
       let params = {
         patentNo: val?val:this.patent.publicNo,
         id: this.reportId,
-        createFrom:2
+        createFrom:this.reportId?2:0
       }
       this.$api.scratchWordsQuery(params).then(response => {
         if (response.code==200) {

+ 58 - 14
RMS-FrontEnd/src/views/components/articles/components/PatentBasic.vue

@@ -7,7 +7,7 @@
           <el-col :span="24">
             <el-tabs value="0">
               <el-tab-pane label="摘要" name="0">
-                <p class="common" :data-type="'摘要'+(patent.change2?'译文':'原文')" v-html="getViewDom2(patent, 'abstractStr','摘要')" >
+                <p class="common" :data-type="'摘要'+(patent.change2?'译文':'原文')" :style="setStyle()" v-html="getViewDom2(patent, 'abstractStr','摘要')" >
                     
                 </p>
                
@@ -59,7 +59,7 @@
       <el-col :span="6">
          <el-card shadow="never" class="text-align_center" style="margin-top:50px" data-type="附图">
           <!-- <el-image :src="getImagePath(patent.abstractPath)" :preview-src-list="[getImagePath(patent.abstractPath)]" style="height: 200px;"></el-image> -->
-          <el-image :src="getImagePath1(patent)" :preview-src-list="[getImagePath1(patent)]" style="height: 200px;">
+          <el-image v-if="(!reportId && patent.abstractPath2)||reportId" :src="patent.abstractPath2?patent.abstractPath2:getImagePath1(patent)" :preview-src-list="[patent.abstractPath2]" :style="{width:style.width,height:style.height}">
             <div slot="error" class="image-slot">
               <el-image :src="getErrorImage(patent)" :preview-src-list="[getErrorImage(patent)]">
                 <div slot="error" class="image-slot">
@@ -98,29 +98,33 @@
 
       <el-row :gutter="24">
     
-      <el-col :span="18" >
+        <el-col :span="18" >
         <el-row :gutter="24">
           <el-col :span="24">
             <el-tabs value="0">
               <el-tab-pane label="相关人" name="0">
                 <el-descriptions :column="1">
-                <el-descriptions-item label="申请人" labelStyle="width:90px" v-if="patent.applicant" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
-                   <div class="patent-basic-value" v-for="item in patent.applicant.filter(a => a.dataType === 2)"   v-html="getViewDom(item.name,'申请人')+'(标:'+getViewDom(item.shortName,'申请人')+')&nbsp;&nbsp;&nbsp;&nbsp;'"></div>
+                  <el-descriptions-item label="申请人" labelStyle="width:90px" v-if="patent.applicant" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
+                   <div class="patent-basic-value" v-for="item in patent.applicant.filter(a => a.dataType === 2)" >
+                    <span v-html="getViewDom(item.name,'申请人')"></span><span v-if="item.shortName" v-html="'(标:'+getViewDom(item.shortName,'申请人')+')&nbsp;&nbsp;&nbsp;&nbsp;'"></span>
+                   </div>
                 </el-descriptions-item>
                 <el-descriptions-item label="申请人地址" labelStyle="width:90px" v-if="patent.applicant">
-                   <div class="patent-basic-value" v-for="(item,index) in patent.applicant.filter(a => a.dataType === 2)"  v-if="index==0"  v-html="getViewDom(item.addressStr,'申请人地址')"></div>
+                   <div class="patent-basic-value" v-for="(item,index) in patent.applicant.filter(a => a.dataType === 2)"  v-if="index==0" v-html="getViewDom(item.addressStr,'申请人地址')"></div>
                 </el-descriptions-item>
-               <el-descriptions-item label="权利人" labelStyle="width:90px" v-if="patent.applicant" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
-                 <div class="patent-basic-value" v-for="item in patent.applicant.filter(a => a.dataType === 1)"  v-html="getViewDom(item.name,'权利人')+'(标:'+getViewDom(item.shortName,'权利人')+')&nbsp;&nbsp;&nbsp;&nbsp;'"></div>
+               <el-descriptions-item label="权利人" labelStyle="width:90px" v-if="patent.applicant && patent.applicant.filter(a => a.dataType === 1).length>0" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
+                 <div class="patent-basic-value" v-for="item in patent.applicant.filter(a => a.dataType === 1)">
+                  <span v-html="getViewDom(item.name,'权利人')"></span><span v-if="item.shortName" v-html="'(标:'+getViewDom(item.shortName,'权利人')+')&nbsp;&nbsp;&nbsp;&nbsp;'"></span>
+                 </div>
                </el-descriptions-item>
-                <el-descriptions-item label="权利人地址" labelStyle="width:90px" v-if="patent.applicant">
+                <el-descriptions-item label="权利人地址" labelStyle="width:90px" v-if="patent.applicant && patent.applicant.filter(a => a.dataType === 1).length>0">
                   <div class="patent-basic-value" v-for="(item,key) in patent.applicant.filter(a => a.dataType === 1)" v-if="key==0"  v-html="getViewDom(item.addressStr,'权利人地址')"></div>
                 </el-descriptions-item>
                
-                <el-descriptions-item label="发明人" labelStyle="width:90px" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
-                  <div class="patent-basic-value" v-for="item in patent.inventor"  v-html="getViewDom(item.name,'发明人')+ '&nbsp;&nbsp;&nbsp;&nbsp;'"></div>
+                <el-descriptions-item label="发明人" labelStyle="width:90px" v-if="patent.inventor && patent.inventor.length>0" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
+                  <div class="patent-basic-value" v-for="item in patent.inventor" v-html="getViewDom(item.name,'发明人')+ '&nbsp;&nbsp;&nbsp;&nbsp;'"></div>
                 </el-descriptions-item>
-                <el-descriptions-item label="代理人" labelStyle="width:90px" v-if="patent.agent">
+                <el-descriptions-item label="代理人" labelStyle="width:90px" v-if="patent.agent && patent.agent.length>0">
                   <div class="patent-basic-value" v-for="item in patent.agent"  v-html="getViewDom(item.name,'代理人')+ '&nbsp;&nbsp;&nbsp;&nbsp;'"></div>
                 </el-descriptions-item>
                 <el-descriptions-item label="代理机构" labelStyle="width:90px" v-if="patent.agency">
@@ -176,10 +180,50 @@ export default {
     }
   },
 watch:{
-
+  patent(val,oldVal){
+      if(val!=oldVal){
+        this.$nextTick(()=>{
+          if(!this.reportId && !this.patent.abstractPath2 && this.patent.publicNo){
+            var params = {
+              patentCell:4,
+              patentNo:this.patent.publicNo,
+              appNo:this.patent.applicationNo,
+            }
+            this.$api.getPatentPart(params).then(response=>{
+                  if(response.code == 200){
+                    if(Object.keys(response.data).length>0 && response.data.image.length>0){
+                      this.$set(this.patent,'abstractPath2',response.data.image[0].url)
+                    }else{
+                      this.$set(this.patent,'abstractPath2','q')
+                    }
+                    
+                    this.getHeight(this.patent.abstractPath2, this.patent)
+                  }
+              })
+          }
+        })
+      }
+    }
 },
   mounted() {
-
+    if(!this.reportId && !this.patent.abstractPath2 && this.patent.publicNo){
+      var params = {
+        patentCell:4,
+        patentNo:this.patent.publicNo,
+        appNo:this.patent.applicationNo,
+      }
+       this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              if(Object.keys(response.data).length>0 && response.data.image.length>0){
+                this.$set(this.patent,'abstractPath2',response.data.image[0].url)
+              }else{
+                this.$set(this.patent,'abstractPath2','q')
+              }
+              
+              this.getHeight(this.patent.abstractPath2, this.patent)
+            }
+        })
+    }
   },
 
   methods: {

+ 57 - 1
RMS-FrontEnd/src/views/components/articles/components/PatentFamily.vue

@@ -18,7 +18,11 @@
     <el-table v-loading="loading" :data="tableData" header-row-class-name="custom-table-header">
       <el-table-column label="摘要附图" align="center" min-width="120px" show-overflow-tooltip>
         <template slot-scope="scope">
-          <el-image v-if="scope.row.patentId !== -1" :src="getImagePath(scope.row.abstractPath)" :preview-src-list="[getImagePath(scope.row.abstractPath)]" style="height: 150px;"></el-image>
+          <el-image v-if="scope.row.patentId !== -1 || (!reportId && scope.row.abstractPath2)" :src="scope.row.abstractPath2?scope.row.abstractPath2:getImagePath1(scope.row)" :preview-src-list="[scope.row.abstractPath2]"  :style="{width:style.width,height:style.height}">
+              <div slot="error" class="image-slot">
+                  <img src="https://www.patentstar.com.cn/img/Common/nopic.jpg" alt="">
+            </div>
+            </el-image>
           <span v-else v-html="getViewDom(scope.row.name)"></span>
         </template>
       </el-table-column>
@@ -82,6 +86,12 @@ export default {
     patentId() {
       this.queryParams.current = 1
       this.onChange()
+    },
+    patentNo(){
+      if(!this.reportId){
+        this.queryParams.current = 1
+        this.onChange()
+      }
     }
   },
   mounted() {
@@ -96,7 +106,53 @@ export default {
         this.loading = false
       })
     },
+    getData(){
+      this.loading = true
+        var params = {
+            patentCell:5,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+            current:this.queryParams.current,
+            size:this.queryParams.size
+          }
+        this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              this.tableData = response.data.familyPatentResult.records
+              this.tableData.forEach(item=>{
+                this.getFamilyImage(item)
+              })
+              this.total = response.data.familyPatentResult.total
+              this.loading = false
+            }
+        }).catch(error=>{
+          this.tableData= []
+          this.total = 0
+          this.loading = false
+        })
+    },
+    getFamilyImage(patent){
+      var params = {
+        patentCell:4,
+        patentNo:patent.publicNo,
+        appNo:patent.applicationNo,
+      }
+       this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              if(Object.keys(response.data).length>0 && response.data.image.length>0){
+                this.$set(patent,'abstractPath2',response.data.image[0].url)
+              }else{
+                this.$set(patent,'abstractPath2','q')
+              }
+              
+              this.getHeight(patent.abstractPath2, patent)
+            }
+        })
+    },
     onChange() {
+      if(!this.reportId){
+        this.getData()
+        return false;
+      }
       if (this.type === 1) {
         this.queryParams.familyId = this.patent.simpleFamily
       } else if(this.type === 2) {

+ 30 - 3
RMS-FrontEnd/src/views/components/articles/components/PatentImage.vue

@@ -26,7 +26,7 @@
               <el-button  class="edit" type="text" @click="handleEdit(item)">编辑</el-button>
             </div>
             <div class="text-align_center">
-              <el-image  l-image :src="getImagePath(item.url)" :preview-src-list="srcList" style="height: 100%; min-height:125px;"></el-image>
+              <el-image :src="!reportId?item.url:getImagePath(item.url)" :preview-src-list="srcList" style="height: 100%; min-height:125px;"></el-image>
             </div>
           </el-card>
         </div>
@@ -85,13 +85,40 @@ export default {
   watch: {
     patentId() {
       this.srcList = this.patent.image.map(item => this.getImagePath(item.url))
+    },
+    patentNo(){
+      if(!this.reportId){
+        this.getData()
+      }
     }
   },
   mounted() {
-    this.srcList = this.patent.image.map(item => this.getImagePath(item.url))
-    // console.log(this.patent)
+    if(this.patent.image){
+      this.srcList = this.patent.image.map(item => this.getImagePath(item.url))
+    }else{
+      if(!this.projectId){
+        this.getData()
+      }
+    }
   },
   methods: {
+    getData(){
+      var params = {
+            patentCell:4,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+          }
+        this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              if(Object.keys(response.data).length>0 && response.data.image.length>0){
+                this.$set(this.patent,'image',response.data.image)
+              }else{
+                this.$set(this.patent,'image',[])
+              }
+              this.srcList = this.patent.image.map(item=>item.url)
+            }
+        })
+    },
     changeWidth(){
       this.width=this.value+'%'
     },

+ 24 - 4
RMS-FrontEnd/src/views/components/articles/components/PatentInstruction.vue

@@ -2,10 +2,10 @@
   <div class="patent-instruction" @mouseup="mouseup" @mousemove="mousemove">
     <el-tabs v-model="name">
       <el-tab-pane label="原文" name="0" :style="{height: height + 'px',overflowY: 'auto'}">
-        <p class="common" v-if="patent.instruction" data-type="说明书文本原文" v-html="getViewDom(patent.instruction.manual,'说明书文本原文')"></p>
+        <p class="common" v-if="patent.instruction" data-type="说明书文本原文" v-html="getViewDom(patent.instruction.manual,'说明书文本原文')" :style="setStyle()"></p>
       </el-tab-pane>
       <el-tab-pane label="译文" name="1" :style="{height: height + 'px',overflowY: 'auto'}">
-        <p class="common" v-if="patent.instruction" data-type="说明书文本译文" v-html="getViewDom(patent.instruction.manualOut,'说明书文本译文')"></p>
+        <p class="common" v-if="patent.instruction" data-type="说明书文本译文" v-html="getViewDom(patent.instruction.manualOut,'说明书文本译文')" :style="setStyle()"></p>
       </el-tab-pane>
     </el-tabs>
   </div>
@@ -14,9 +14,9 @@
 <script>
 import { addContrast } from './mixins'
 import { commonMixins } from "./mixins"
-import { patentKeywordsHighlight } from "@/views/components/common/mixins";
+import { patentKeywordsHighlight,changeTranslation } from "@/views/components/common/mixins";
 export default {
-  mixins: [addContrast,commonMixins,patentKeywordsHighlight],
+  mixins: [addContrast,commonMixins,patentKeywordsHighlight,changeTranslation],
   data() {
     return {
       height: 0,
@@ -27,14 +27,34 @@ export default {
     fullHeight() {
       this.refresh()
     },
+    patentNo(){
+      if(!this.reportId){
+        this.getData()
+      }
+    }
   },
   created() {
     window.addEventListener('resize', this.handleResize)
   },
   mounted() {
     this.handleResize()
+    if(!this.reportId){
+      this.getData()
+    }
   },
   methods: {
+    getData(){
+      var params = {
+            patentCell:2,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+          }
+        this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              this.$set(this.patent,'instruction',response.data.instruction)
+            }
+        })
+    },
     handleResize(event) {
       this.fullHeight = document.documentElement.clientHeight
       this.height = this.fullHeight - 250

+ 93 - 8
RMS-FrontEnd/src/views/components/articles/components/PatentPDF.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="patent-pdf">
     <div v-if="!sign">
-      <el-button-group class="float_left margin-bottom_10">
+      <el-button-group class="float_left margin-bottom_10" v-if="patent.pdf && patent.pdf.length>1">
         <el-button size="small" :type="pdfType === 2 ? 'primary' : ''" @click="handleSelect(2)">授权文档</el-button>
         <el-button size="small" :type="pdfType === 1 ? 'primary' : ''" @click="handleSelect(1)">公开文档</el-button>
       </el-button-group>
@@ -25,10 +25,9 @@
 </template>
 
 <script>
-import Config from '@/config'
 
 export default {
-  props: ['patent', 'projectId','sign'],
+  props: ['patent', 'reportId','sign','pdfType1'],
   components: {},
   data() {
     return {
@@ -37,28 +36,114 @@ export default {
       height: 0,
       show: false,
       btnLoading: false,
-      pdfType: 2,
+      pdfType: this.pdfType1||2,
       pdf: null
     }
   },
   watch: {
     fullHeight() {
-      this.refresh()
+      if(this.reportId){
+        this.refresh()
+      }
     },
     patent() {
-      this.refresh()
+      if(this.reportId){
+        this.refresh()
+      }
+      
     },
     patentId() {
-      this.refresh()
+      if(this.reportId){
+        this.refresh()
+      }
+    },
+    patentNo(){
+      if(!this.reportId){
+        this.getData()
+      }
     }
   },
   created(){
     window.addEventListener('resize', this.handleResize)
   },
   mounted() {
-    this.refresh()
+    if(!this.reportId){
+      if(this.patent.pdf && this.patent.pdf.length>0){
+        this.show = false
+        this.height = (this.fullHeight - 230) + 'px'
+        var index = this.patent.pdf.findIndex(item => {
+          return item.type == 2
+        })
+        if (index != -1) {
+          this.pdfType = 2
+        } else {
+          this.pdfType = 1
+        }
+        this.getPDFSrc(this.pdfType)
+        // let blob = this.base64ToBlob(this.patent.pdf[0])
+        // this.$set(this,'src',URL.createObjectURL(blob))
+        // // this.src = this.patent.pdf[0].url
+        // this.$nextTick(() => {
+        //   this.show = true
+        // })
+      }else{
+        this.getData()
+      }
+      
+    }else{
+      this.refresh()
+    }
   },
   methods: {
+    getData(){
+      if(this.patent.pdf && this.patent.pdf.length>0){
+        return false
+      }
+      this.show  =false
+      this.height = (this.fullHeight - 230) + 'px'
+      var params = {
+            patentCell:3,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+          }
+        this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              if(Object.keys(response.data).length == 0){
+                return false
+              }
+              if(response.data.pdf.length==0){
+                return false
+              }
+              this.$set(this.patent,'pdf',response.data.pdf)
+              var index = this.patent.pdf.findIndex(item => {
+                return item.type == 2
+              })
+              if (index != -1) {
+                this.pdfType = 2
+              } else {
+                this.pdfType = 1
+              }
+              this.getPDFSrc(this.pdfType)
+            }
+        })
+    },
+    getPDFSrc(type) {
+      let blob = this.base64ToBlob(this.patent.pdf.find(item => { return item.type == type }))
+      this.$set(this, 'src', URL.createObjectURL(blob))
+      this.$nextTick(() => {
+        this.show = true
+      })
+    },
+    base64ToBlob(row){
+      var dataUrl = row.pictureStringData
+      let bstr = window.atob(dataUrl)
+      let n = bstr.length
+      let u8arr = new Uint8Array(n)
+      while (n--) {
+          u8arr[n] = bstr.charCodeAt(n);
+      }
+      return new Blob([u8arr], { type: "application/pdf" });
+    },
     handleSelect(type) {
       this.pdfType = type
       this.refresh()

+ 28 - 6
RMS-FrontEnd/src/views/components/articles/components/PatentRight.vue

@@ -5,13 +5,13 @@
         <!-- <p class="common" v-for="(item, index) in records.original">
           <span v-if="item" :data-type="'权利要求原文'+(index+1)"  v-html="getViewDom(item,'权利要求原文'+(index+1))"></span>
         </p> -->
-        <div v-html="getViewDom1(patent.rights,'权利要求原文','content')"  data-type="权利要求原文"></div>
+        <div v-html="getViewDom1(patent.rights,'权利要求原文','content')"  data-type="权利要求原文" :style="setStyle()"></div>
       </el-tab-pane>
       <el-tab-pane label="译文" name="1" :style="{height: height + 'px',overflowY: 'auto'}">
         <!-- <p class="common" v-for="(item, index) in records.translation">
           <span v-if="item"  :data-type="'权利要求译文'+(index+1)"  v-html="getViewDom(item,'权利要求译文'+(index+1))"></span>
         </p> -->
-        <div v-html="getViewDom1(patent.rights,'权利要求原文','contentOut')"  data-type="权利要求译文"></div>
+        <div v-html="getViewDom1(patent.rights,'权利要求原文','contentOut')"  data-type="权利要求译文" :style="setStyle()"></div>
       </el-tab-pane>
       <el-tab-pane v-if="signPatentNo && type1!=7" label="权利特征" name="2" :style="{height: height + 'px',overflowY: 'auto'}">
           <Features :patentNo="signPatentNo" :reportId="reportId"></Features>
@@ -24,14 +24,14 @@
 import { addContrast } from './mixins'
 import { commonMixins } from "./mixins"
 import Features from './features.vue'
-import { patentKeywordsHighlight } from "@/views/components/common/mixins";
+import { patentKeywordsHighlight,changeTranslation } from "@/views/components/common/mixins";
 
 export default {
   components:{
     Features
   },
   props:['signPatentNo','reportId','parentNo','type1'],
-  mixins: [commonMixins,addContrast,patentKeywordsHighlight],
+  mixins: [commonMixins,addContrast,patentKeywordsHighlight,changeTranslation],
   data() {
     return {
       height: 0,
@@ -48,6 +48,12 @@ export default {
     },
     patentId() {
       this.initData()
+    },
+    patentNo(){
+      if(!this.patentId){
+         this.initData()
+      }
+     
     }
   },
   created() {
@@ -59,8 +65,24 @@ export default {
   },
   methods: {
     initData() {
-      this.records.original = this.patent.rights.map(item => item.content)
-      this.records.translation = this.patent.rights.map(item => item.contentOut)
+      if(this.patent.rights){
+        this.records.original = this.patent.rights.map(item => item.content)
+        this.records.translation = this.patent.rights.map(item => item.contentOut)
+      }else{
+        if(!this.reportId){
+          var params = {
+            patentCell:1,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+          }
+          this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              this.$set(this.patent,'rights',response.data.rights)
+            }
+          })
+        }
+      }
+      
     },
     handleResize(event) {
       this.fullHeight = document.documentElement.clientHeight

+ 28 - 7
RMS-FrontEnd/src/views/components/articles/components/PatentStatus.vue

@@ -10,10 +10,12 @@
 		<td class="legal-status">{{tableData[0].status}}</td>
 	</tr>
 </table> -->
-<div> <h3 class="patent-articles-patent-status-event">当前状态</h3></div>
-<el-button type="success" size="mini">{{patent.affair[0].createSimpleStatus}}</el-button>
+<div v-if="reportId">
+  <div> <h3 class="patent-articles-patent-status-event">当前状态</h3></div>
+<el-button type="success" size="mini">{{patent.affair&& patent.affair.length>0?patent.affair[0].createSimpleStatus:''}}</el-button>
 <div> <h3 class="patent-articles-patent-status-event">法律状态/事件</h3></div>
-<el-button type="primary" size="mini">{{patent.affair[0].status}}</el-button  >
+<el-button type="primary" size="mini">{{patent.affair&& patent.affair.length>0?patent.affair[0].status:''}}</el-button  >
+</div>
 <div> <h3 class="patent-articles-patent-status-event">事务数据</h3></div>
     <!-- <el-table :data="tableDataList" header-row-class-name="custom-table-header" >
       <el-table-column label="发生时间" align="center" width="180px" prop="year" show-overflow-tooltip>
@@ -33,7 +35,7 @@
       </el-table-column>
     </el-table> -->
         <div class="block" style="width:100%">
-  <el-timeline>
+  <el-timeline v-if="patent.affair&& patent.affair.length>0">
     <el-timeline-item v-for="item in patent.affair[0].inpadoc" :timestamp="item.inpadocData[0].content" placement="top">
       <el-card >
         <div v-for="(i,index) in item.inpadocData" v-if="index!=0" v-html="getViewDom(i.name)+':'+getViewDom(i.content)"></div>
@@ -59,18 +61,37 @@ export default {
   watch: {
     patentId() {
       this.tableData = this.patent.affair
+    },
+    patentNo(){
+      if(!this.reportId){
+        this.getData()
+      }
     }
   },
   mounted() {
-    this.tableData = this.patent.affair
-    this.tableDataList=this.tableData[0].inpadoc
+    // this.tableData = this.patent.affair
+    // this.tableDataList=this.tableData[0].inpadoc
     // console.log(this.tableData[0].inpadoc, this.tableDataList[0].length);
     // for(var i in this.tableData[0].inpadoc[0]){
     //   console.log(i)
     // }
+    if(!this.reportId){
+        this.getData()
+      }
   },
   methods: {
-    
+    getData(){
+      var params = {
+            patentCell:6,
+            patentNo:this.patent.publicNo,
+            appNo:this.patent.applicationNo,
+          }
+        this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              this.$set(this.patent,'affair',response.data.affair)
+            }
+        })
+    },
   }
 }
 </script>

+ 1 - 1
RMS-FrontEnd/src/views/components/articles/components/history/invalid.vue

@@ -5,7 +5,7 @@
                 <el-button @click="addInvalid">添加</el-button>
             </div>
             <el-table :data="invalidData" border style="width: 100%">
-                <el-table-column label="专利号" prop="newPatentNo" align="center">
+                <el-table-column label="无效案号" prop="newPatentNo" align="center">
                     <template slot-scope="scope">
                         <span v-if="scope.row.vVisible">{{scope.row.newPatentNo}}</span>
                         <el-input v-else v-model="scope.row.newPatentNo"></el-input>

+ 83 - 3
RMS-FrontEnd/src/views/components/articles/components/mixins.js

@@ -17,14 +17,49 @@ const colourBlend = (c1, c2, ratio) => {
 
 }
 export const commonMixins = {
-  props: ['patent', 'projectId', 'patentId'],
+  props: ['patent', 'reportId', 'patentId'],
   mixins: [patentKeywordsHighlight],
+  data() {
+    return {
+      style:{
+        height:'100%',
+        width:'100%'
+      },
+      size:{}
+    }
+  },
+  mounted() {
+    window.addEventListener('resize', this.changeWidth)
+  },
   methods: {
+    changeWidth(){
+      var dom = document.querySelector('.picture')
+       var maxWidth = null
+       var maxHeight = null
+       if(dom){
+         maxWidth =  dom.clientWidth - 30
+         maxHeight = 200
+       }else{
+          maxWidth =  120
+          maxHeight = 150
+       }
+       var size = JSON.parse(JSON.stringify(this.size))
+       const scale = Math.min(maxWidth / size.width, maxHeight / size.height); 
+       size.width=scale * size.width
+       size.height=scale * size.height
+       this.$set(this.style,'width',size.width+'px')
+       this.$set(this.style,'height',size.height+'px')
+    },
     getImagePath(url) {
       if (!url) {
         return ''
       }
-      return this.$p2 + url
+      if(this.reportId){
+        var url1 = this.$p2 + url
+      }else{
+        var url1 = url
+      }
+      return url1
     },
     getImagePath1(patent) {
       if(Object.keys(patent).length==0){
@@ -33,7 +68,10 @@ export const commonMixins = {
       if(!patent.abstractPath){
         return this.getErrorImage(patent)
        }
-      return this.$p2 + patent.abstractPath
+       var url = this.$p2 + patent.abstractPath
+       this.$set(patent,'abstractPath2',url)
+       this.getHeight(url, patent)
+      return url
       // var cc =  patent.publicNo.substring(0,2)
       // if(cc != 'CN'){
       //   var date = patent.publicDate.replace(/-/g,'')
@@ -48,10 +86,52 @@ export const commonMixins = {
       // }
       // return a
     },
+    async getHeight(url,patent){
+      let size = await this.getImageSize(url);
+      var dom = document.querySelector('.picture')
+      
+       var maxWidth = null
+       var maxHeight = null
+      if (dom) {
+         maxWidth =  dom.clientWidth -5
+         maxHeight = dom.clientHeight -5
+       }else{
+          maxWidth =  120
+          maxHeight = 150
+      }
+       const scale = Math.min(maxWidth / size.width, maxHeight / size.height);  
+       this.size = size
+       size.width=scale * size.width
+       size.height=scale * size.height
+       this.$set(this.style,'width',size.width+'px')
+      this.$set(this.style, 'height', size.height + 'px')
+      this.$set(patent,'imgWidth',size.width+'px')
+       this.$set(patent,'imgHeight',size.height+'px')
+      
+       return size
+    },
+    getImageSize(url) {
+      return new Promise(function (resolve, reject) {
+          let image = new Image();
+          image.onload = function () {
+              resolve({
+                  width: image.width,
+                  height: image.height
+              });
+          };
+        image.onerror = function () {
+             //  reject(new Error('error'));
+          };
+          image.src = url;
+      });
+  },
     getErrorImage(patent){
       if(Object.keys(patent).length==0){
         return ''
       }
+      if(!patent.publicNo){
+        return ''
+      }
       var cc =  patent.publicNo.substring(0,2)
       if(patent.publicAccreditDate){
         var date = patent.publicAccreditDate.replace(/-/g,'')

File diff suppressed because it is too large
+ 19 - 22
RMS-FrontEnd/src/views/components/articles/index.vue


+ 1 - 1
RMS-FrontEnd/src/views/components/common/PatentDetails/index.vue

@@ -63,7 +63,7 @@ export default{
       let params = {
         patentNo: val?val:this.patentNo,
         id: this.reportId,
-        createFrom:2
+        createFrom:this.reportId?2:0
       }
       this.$api.scratchWordsQuery(params).then(response => {
         if (response.code==200) {

+ 97 - 14
RMS-FrontEnd/src/views/components/common/mixins.js

@@ -24,8 +24,8 @@ export const patentQueryMixins = {
     }
   },
   computed: {
-    projectId() {
-      return this.$store.state.patent.projectId
+    reportId() {
+      return this.$store.state.patent.reportId
     },
     folder() {
       return this.$store.state.patent.folder
@@ -49,7 +49,18 @@ export const patentQueryMixins = {
 }
 
 export const changeTranslation = {
+  computed:{
+    textStyle(){
+      return this.$store.state.patent.style
+    }
+  },
   methods: {
+    setStyle(){
+      if(!this.textStyle){
+        return false
+      }
+      return 'font-size:'+this.textStyle.size+'px;line-height:'+this.textStyle.lineHeight+';padding:'+this.textStyle.padding[0]+'px '+this.textStyle.padding[1]+'px '+this.textStyle.padding[2]+'px '+this.textStyle.padding[3]+'px'
+    },
     getViewDom2(row, key,field) {
       let text = ""
       const change = row.change
@@ -83,18 +94,25 @@ export const patentViewList = {
   mixins: [changeTranslation],
   data() {
     return {
-      refresh: true
+      refresh: true,
+      click:false
     }
   },
   props: {
     selected: {
       type: Array
+    },
+    patentNoList:{
+      type: Array
     }
   },
-  computed: {
-    projectId() {
-      return this.$store.state.patent.projectId
+  computedData:{
+    reportId() {
+      return this.$store.state.patent.reportId
     },
+  },
+  computed: {
+    
     params() {
       return this.$store.state.patent.params
     },
@@ -102,7 +120,42 @@ export const patentViewList = {
       return this.$store.state.patent.records
     }
   },
+  watch:{
+    'patentNoList'(val){
+      if(!this.click)
+      this.refresh = false
+      this.$nextTick(()=>{
+        this.click = false
+        this.refresh = true
+      })
+    }
+  },
   methods: {
+    addRecords(){
+      if(!this.reportId){
+        this.records.forEach((item,index)=>{
+          this.getImageURL1(item)
+        })
+      }
+    },
+    getImageURL1(patent){
+      var params = {
+        patentCell:4,
+        patentNo:patent.publicNo,
+        appNo:patent.applicationNo,
+      }
+       this.$api.getPatentPart(params).then(response=>{
+            if(response.code == 200){
+              if(Object.keys(response.data).length>0 && response.data.image.length>0){
+                this.$set(patent,'abstractPath2',response.data.image[0].url)
+              }else{
+                this.$set(patent,'abstractPath2','q')
+              }
+              
+              this.getHeight(patent.abstractPath2, patent)
+            }
+        })
+    },
     refreshCheckBox() {
       this.refresh = false
       this.$nextTick(() => {
@@ -110,21 +163,48 @@ export const patentViewList = {
       })
     },
     changeSelect(patent) {
-      const index = this.selected.indexOf(patent.id)
-      if (index === -1) {
-        this.selected.push(patent.id)
+      this.click = true
+      const index1 = this.patentNoList.indexOf(patent.patentNo)
+      if (index1 === -1) {
+        if(this.reportId){
+          this.patentNoList.push(patent.patentNo)
+        }else{
+          this.patentNoList.push(patent.applicationNo)
+        }
+        
       } else {
-        this.selected.splice(index, 1)
+        this.patentNoList.splice(index1, 1)
+      }
+      if(patent.id){
+         const index = this.selected.indexOf(patent.id)
+          if (index === -1) {
+            this.selected.push(patent.id)
+          } else {
+            this.selected.splice(index, 1)
+          }
       }
+     
       this.$emit('select-change', this.selected)
+      this.$emit('addSelect',patent.applicationNo)
     },
-    handleLink(row) {
-      const router = this.$router.resolve({
-        path: '/workspace/folder/' + row.id,
+    handleLink(row,index) {
+      // const router = this.$router.resolve({
+      //   path: '/workspace/folder/' + row.id,
+      //   query: {
+      //     id: this.reportId,
+      //   }
+      // })
+      // this.$s.setSession('params', this.params)
+      // window.open(router.href, '_blank');
+      var router = this.$router.resolve({
+        path: '/search/patentDetail',
         query: {
-          id: this.projectId,
+          applicationNo: row.applicationNo,
+          patentNo: row.publicNo,
         }
       })
+      this.params.name = this.$s.getSession('params').name
+      this.params.index = (index) + ((this.params.current - 1) * this.params.size)
       this.$s.setSession('params', this.params)
       window.open(router.href, '_blank');
     }
@@ -254,6 +334,9 @@ export const patentKeywordsHighlight = {
       var html = ''
       if(row.length == 1){
         var str = row[0][key]
+        if(!str){
+          return ''
+        }
         var arr = str.split(/\r\n/g)
         arr.forEach((item,index)=>{
           html = html + `<p class="common" right-sort="${index}"> ${item} </p>`

+ 1 - 1
RMS-FrontEnd/src/views/components/gaoliang/components/pizhu.vue

@@ -205,7 +205,7 @@ export default {
           let params = {
             patentNo:this.mark.patentNo,
             id: this.mark.rangeId,
-            createFrom:2
+            createFrom:this.mark.rangeId?2:0
           }
           this.$api.scratchWordsQuery(params).then(res => {
             if (res.code == 200) {

+ 2 - 1
RMS-FrontEnd/src/views/components/import/PatentNoImport/download.vue

@@ -80,7 +80,7 @@ import timeChoose from "@/views/components/common/components/timeChoose.vue";
 
 export default {
   mixins:[cron],
-  props:['reportId','downloadId'],
+  props:['reportId','downloadId','asCompare'],
   components: {
     SystemTask,
     timeChoose,
@@ -268,6 +268,7 @@ export default {
       if (this.downloadId == 8) {
         this.queryParams.patentNo = this.queryParams.conditions
         this.queryParams.conditions = ''
+        this.queryParams.asCompare=this.asCompare
         this.$api.importByNos(this.queryParams).then(res => {
           // console.log(res.code);
           if (res.code == 200) {

+ 4 - 1
RMS-FrontEnd/src/views/components/import/PatentNoImport/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <download :projectId="id" :downloadId="option"></download>
+    <download :reportId="id" :downloadId="option" :asCompare="asCompare"></download>
   </div>
 </template>
 
@@ -22,6 +22,9 @@ export default {
     option() {
       return this.$route.query.option
     },
+    asCompare() {
+      return this.$route.query.asCompare
+    }
   },
   methods: {
 

+ 169 - 61
RMS-FrontEnd/src/views/components/import/conditionImport/components/projectListDialog.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <el-dialog title="导入到专题库" :visible.sync="dialogVisible" width="500px" :before-close="handleClose">
+    <el-dialog title="导入到报告" :visible.sync="dialogVisible" width="500px" :before-close="handleClose">
         <div>
             <el-form ref="form" :model="form" :rules="rules" label-width="100px">
               <!-- <el-form-item label="任务名称">
@@ -8,24 +8,23 @@
                   <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
                 </div>
               </el-form-item> -->
-                <el-form-item label="选择报告" prop="projectId">
+                <el-form-item label="选择报告" prop="reportId">
                     <div class="selectButton">
-                        <el-select v-model="form.projectId" filterable clearable @change="changeProjectId" placeholder="请选择专题库" >
+                        <el-select v-model="form.reportId" filterable remote clearable @change="changeProjectId" placeholder="请选择报告" :loading="loading" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod">
                             <el-option
-                            v-for="item in projectList"
+                            v-for="item in reportList"
                             :key="item.id"
                             :label="item.name"
                             :value="item.id"
                             >
                             </el-option>
                         </el-select>
-                        <el-button @click="addProject"><i class="el-icon-plus"></i></el-button>
+                        <!-- <el-button @click="addProject"><i class="el-icon-plus"></i></el-button> -->
                     </div>
                 </el-form-item>
-                <template v-if="form.projectId" >
+                <!-- <template v-if="form.reportId" >
                     <div style="margin:10px 0;">
                         <p>选择需要关联的标引与分类</p>
-                        <!-- <el-form-item label="选择需要关联的标引与分类"> -->
                             <el-table :data="tableData" :show-header="false">
                                 <el-table-column type="expand">
                                     <template slot-scope="props">
@@ -86,15 +85,22 @@
                                     <template slot-scope="scope">
                                         <div style="display:flex;justify-content: space-between;align-items:center">
                                             <span>{{ scope.row.name }}</span>
-                                            <span v-if="scope.row.field === 'folder'"><el-button type="primary" size="small" @click="handleFolder(form.projectId)" :disabled="!($permission('/workspace/common/folder_manage') && $r(form.projectId,[1,2]))">文件夹管理</el-button></span>
-                                            <span v-else><el-button type="primary" size="small" @click="handleManage(form.projectId)" :disabled="!($permission('/workspace/common/customField') && $r(form.projectId,[1,2]))">自定义栏位管理</el-button></span>
+                                            <span v-if="scope.row.field === 'folder'"><el-button type="primary" size="small" @click="handleFolder(form.reportId)" :disabled="!($permission('/workspace/common/folder_manage') && $r(form.reportId,[1,2]))">文件夹管理</el-button></span>
+                                            <span v-else><el-button type="primary" size="small" @click="handleManage(form.reportId)" :disabled="!($permission('/workspace/common/customField') && $r(form.reportId,[1,2]))">自定义栏位管理</el-button></span>
                                         </div>
                                     </template>
                                 </el-table-column>
                             </el-table>
-                        <!-- </el-form-item>  -->
                     </div>
-                </template>
+                </template> -->
+                <el-form-item label="作为对比文件">
+                  <el-switch
+                    v-model="form.asCompare"
+                    active-value="1"
+                    active-text="是"
+                    inactive-text="否">
+                  </el-switch>
+                </el-form-item>
                 <el-form-item label="下载内容">
                     <el-select v-model="form.configCells" multiple collapse-tags style="width:100%">
                         <el-option v-for="item in patentField"
@@ -125,37 +131,33 @@
                 </template>
             </el-form>
             <div class="button">
-                <el-button type="primary" size="small" @click="onSubmit">导入</el-button>
+                <el-button type="primary" size="small" @click="onSubmit" :loading="btnLoading">导入</el-button>
                 <el-button size="small" @click="handleClose">取消</el-button>
             </div>
         </div>
     </el-dialog>
    
-
+<!-- 
     <project-form-drawer @submit="submitProjectForm" :common-data="commonData" ref="projectFormDrawer"/>
 
     <project-field-drawer @close="handleClose2" ref="projectFieldDrawer" />
 
-    <project-folder-dialog @close="updateFolder" ref="projectFolderDialog" />
+    <project-folder-dialog @close="updateFolder" ref="projectFolderDialog" /> -->
   </div>
 </template>
 
 <script>
-import ProjectFormDrawer from "@/views/workspace/components/drawer/Form.vue";
-import timeChoose from "@/views/workspace/components/common/timeChoose.vue";
-
-import ProjectFieldDrawer from "@/views/workspace/components/drawer/Field";
-import ProjectFolderDialog from "@/views/workspace/components/dialog/Folder";
+import timeChoose from "@/views/components/common/components/timeChoose.vue";
 export default {
   components: {
-    ProjectFormDrawer,
     timeChoose,
-    ProjectFieldDrawer,
-    ProjectFolderDialog
   },
   props: [],
   data() {
     return {
+      isLazy:true,
+      loading:false,
+      btnLoading:false,
       customField:{},
       tableData:[
         {
@@ -177,7 +179,11 @@ export default {
       },
       dialogVisible:false,
       form: {},
-      projectList: [],
+      queryParams:{
+        size:10,
+        current:1
+      },
+      reportList: [],
       commonData:{},
       options: [
         {label:'每天',value:'day'},
@@ -209,8 +215,8 @@ export default {
         },
       ],
       rules: {
-          projectId: [
-            { required: true, message: '请选择专题库', trigger: 'change' }
+          reportId: [
+            { required: true, message: '请选择报告', trigger: 'change' }
           ],
       }
     };
@@ -219,10 +225,10 @@ export default {
   computed: {},
   created() {},
   mounted() {
-    this.$api.getCommonData({ keys: 'QUERY_GROUP,ENTERPRISE_APPLICATION_SCENARIO,INVESTIGATION_TYPE' }).then(response => {
-      this.commonData = response.data
-    })
-    this.getProjectList();
+    // this.$api.getCommonData({ keys: 'QUERY_GROUP,ENTERPRISE_APPLICATION_SCENARIO,INVESTIGATION_TYPE' }).then(response => {
+    //   this.commonData = response.data
+    // })
+    this.getReportList();
   },
   methods: {
     open(form){
@@ -233,13 +239,32 @@ export default {
             taskType:0,
             configId:2,
             json: {
-                projectId: 0,
+                reportId: 0,
                 field: [],
                 folder: {}
             }
         }
-       if(this.form.projectId){
-        this.$set(this.form,'projectId',Number(this.form.projectId))
+       if(this.form.reportId){
+        this.$set(this.form,'reportId',Number(this.form.reportId))
+        this.queryParams = {
+            current:1,
+            size:10,
+            reportId:this.form.reportId
+          }
+          var index = this.reportList.findIndex(item=>{
+            return item.id == this.form.reportId
+          })
+          if(index==-1){
+            this.$api.QueryReport(this.queryParams).then(response=>{
+              if(response.code == 200){
+                this.loading = false;
+                this.reportList = [...this.reportList, ...response.data];
+                this.queryParams.reportId = null
+              }
+            }).catch(error=>{
+            })
+          }
+          
        } 
         this.dialogVisible=true
     },
@@ -281,26 +306,63 @@ export default {
               }
               }
           }
+          if(!this.form.asCompare){
+            this.form.asCompare = 0
+          }
+          this.btnLoading = true
           this.$api.addTask(this.form).then(response=>{
             if(response.code == 200){
               this.$message.success(response.data)
+              this.btnLoading = false
               this.handleClose()
+              this.getConfirm()
             }
           }).catch(error=>{
           })
         }
       })
     },
+    //弹窗
+    getConfirm() {
+      const h = this.$createElement;
+      this.$msgbox({
+        title: '提示',
+        message: h('p', null, [
+          h('span', null, '任务正在导入,查看任务进度请前往 '),
+          h('span', {
+            class:'MessageBoxClass' ,on: {
+            click:()=>{
+                this.toTaskList()
+                // 通过close关闭消息弹窗,this.$confirm就是this.$confirm.close(false),其他同理
+                this.$msgbox.close(false)
+            }
+          }},'任务清单',)
+        ]),
+        type: 'warning',
+        showConfirmButton: false,
+      }).then(action => {
+        
+      });
+      
+    },
+    //跳转到任务清单
+    toTaskList() {
+      // 传专题库id是查到当前专题库的导入任务,不传是查看所有导入任务
+      const router = this.$router.resolve({
+        path: '/taskList',
+      })
+      window.open(router.href,'_blank')
+    },
     //切换专题库
     changeProjectId(val){
-        if(val){
-           this.getCustomField(val) 
-        }
+        // if(val){
+        //    this.getCustomField(val) 
+        // }
         
     },
     //获取标引类型
-    getCustomField(projectId) {
-      this.$api.getCustomField({ projectId: projectId }).then(response => {
+    getCustomField(reportId) {
+      this.$api.getCustomField({ reportId: reportId }).then(response => {
         this.customField = response.data;
         ['index', 'classify'].map(key => {
           this.customField[key].map(item => {
@@ -314,24 +376,24 @@ export default {
       })
     },
     //打开自定义栏位弹窗
-    handleManage(projectId) {
-      this.$refs.projectFieldDrawer.open(projectId)
+    handleManage(reportId) {
+      this.$refs.projectFieldDrawer.open(reportId)
     },
     //关闭自定义栏位弹窗并更新自定义栏位数据
-    handleClose2(projectId) {
-      this.getCustomField(projectId)
+    handleClose2(reportId) {
+      this.getCustomField(reportId)
     },
     //获取选中的分类节点
     changeField(id){
         this.form.json.field[id].value = this.$refs[id][0].getCheckedKeys()
     },
     //打开文件夹管理弹窗
-    handleFolder(projectId) {
-      this.$refs.projectFolderDialog.open(projectId)
+    handleFolder(reportId) {
+      this.$refs.projectFolderDialog.open(reportId)
     },
     //关闭文件夹弹窗并更新数据
-    updateFolder(projectId) {
-      this.$api.getProjectFolderList({ projectId: projectId, patentTotal: false }).then(response => {
+    updateFolder(reportId) {
+      this.$api.getProjectFolderList({ reportId: reportId, patentTotal: false }).then(response => {
         this.customField.folder = response.data
       })
     },
@@ -358,21 +420,60 @@ export default {
       }
       this.form.crons=val
     },
-    //查询专题库列表
-    getProjectList() {
-      let params = {
-        current: 1,
-        size: 9999,
-        myself: true,
-        name: "",
-        sort: {
-          order: "desc",
-          prop: "create_time",
-        },
-      };
-      this.$api.getProjectListV2(params).then((response) => {
-        this.projectList = response.data.records;
-      });
+    
+    // 下拉框懒加载
+    lazyLoading() {
+      if(!this.isLazy){
+        return false
+      }
+      this.queryParams.current++;
+      this.getReportList();
+    },
+    //远程搜索
+    remoteMethod(query) {
+      this.isLazy = true
+        if (query !== '') {
+          this.loading = true;
+          this.queryParams = {
+            current:1,
+            size:10,
+            name:query
+          }
+          this.$api.QueryReport(this.queryParams).then(response=>{
+            if(response.code == 200){
+              this.loading = false;
+              this.reportList = response.data
+            }
+          }).catch(error=>{
+          })
+        } else {
+          this.queryParams.name = null
+          this.reportList = [];
+          this.getReportList()
+        }
+      },
+    //查询报告列表
+    getReportList() {
+      if(!this.isLazy){
+        return false
+      }
+      this.$api.QueryReport(this.queryParams).then(response=>{
+        if(response.code == 200){
+          if(response.data && response.data.length == 0){
+            this.isLazy = false
+          }
+          if(this.form.reportId){
+            var index = response.data.findIndex(item=>{
+              return item.id == this.form.reportId
+            })
+            if(index!=-1){
+              response.data.splice(index,1)
+            }
+          }
+          this.reportList = [...this.reportList, ...response.data];
+        }
+      }).catch(error=>{
+      })
     },
     //打开新增专题库弹窗
     addProject() {
@@ -390,7 +491,7 @@ export default {
     },
     //更新列表
     submitProjectForm(type) {
-      this.getProjectList()
+      this.getReportList()
     },
   },
 };
@@ -399,6 +500,13 @@ export default {
 @import "@/assets/css/selectButton.scss";
 </style>
 <style lang="scss" scoped>
+.MessageBoxClass{
+  color: red;
+}
+.MessageBoxClass:hover{
+  cursor:pointer;
+  border-bottom:1px solid red ;
+}
 .button{
     display: flex;
     justify-content: center;

+ 6 - 2
RMS-FrontEnd/src/views/components/import/conditionImport/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div style="background:white">
-    <search :reportId="reportId"></search>
+    <search :reportId="reportId" :asCompare="asCompare"></search>
   </div>
 </template>
 
@@ -18,8 +18,12 @@ export default {
   watch: {},
   computed: {
     reportId(){
-        return this.$route.query.reportId
+        return this.$route.query.id
+    },
+    asCompare() {
+      return this.$route.query.asCompare
     }
+    
   },
   created() {},
   mounted() {},

+ 14 - 11
RMS-FrontEnd/src/views/components/import/conditionImport/patentDetails/patentDetail.vue

@@ -40,7 +40,7 @@
                         <div class="patent-articles-content-left">
                             <!-- <div class="dom1 box1" v-dragControllerDiv1 style="display:flex;width:100%">
                                 <div class="component left1" style="width:100%;overflow-y:auto;overflow-x: hidden;" :style="{height:height}"> -->
-                                    <component style="width:100%;height:100%" :is="componentName" :patent="patent" :patentNo="[patent.patentNo]" :domId="patent.patentNo + '1'"  :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" @refresh="getPatent(applicationNo)"></component>
+                                    <component style="width:100%;height:100%" :style="{height:height}" :is="componentName" :patent="patent" :patentNo="[patent.patentNo]" :domId="patent.patentNo + '1'"  :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" @refresh="getPatent(applicationNo)"></component>
                                 <!-- </div> -->
                                 <!-- <div class="resize2" title="收缩侧边栏" v-show="(radio == 2 || radio == 3) && activeMenu != activeMenu2"><p><span>˙</span><span>˙</span><span>˙</span></p></div>
                                 <div class="resize1" title="收缩侧边栏" v-show="(radio == 4 || radio == 5) && activeMenu != activeMenu2"><span>⋮</span></div>
@@ -58,17 +58,17 @@
 </template>
 
 <script>
-import { changeTranslation, patentKeywordsHighlight } from '@/views/workspace/folder/components/mixins'
+import { changeTranslation, patentKeywordsHighlight } from '@/views/components/common/mixins'
 
-import PatentField from '@/views/workspace/folder/articles/components/PatentField'
-import PatentAnnotation from '@/views/workspace/folder/articles/components/PatentAnnotation'
-import PatentBasic from "@/views/workspace/folder/articles/components/PatentBasic"
-import PatentPDF from "@/views/workspace/folder/articles/components/PatentPDF"
-import PatentImage from "@/views/workspace/folder/articles/components/PatentImage"
-import PatentRight from "@/views/workspace/folder/articles/components/PatentRight"
-import PatentInstruction from "@/views/workspace/folder/articles/components/PatentInstruction"
-import PatentFamily from "@/views/workspace/folder/articles/components/PatentFamily"
-import PatentStatus from "@/views/workspace/folder/articles/components/PatentStatus"
+import PatentField from '@/views/components/articles/components/PatentField'
+import PatentAnnotation from '@/views/components/articles/components/PatentAnnotation'
+import PatentBasic from "@/views/components/articles/components/PatentBasic"
+import PatentPDF from "@/views/components/articles/components/PatentPDF"
+import PatentImage from "@/views/components/articles/components/PatentImage"
+import PatentRight from "@/views/components/articles/components/PatentRight"
+import PatentInstruction from "@/views/components/articles/components/PatentInstruction"
+import PatentFamily from "@/views/components/articles/components/PatentFamily"
+import PatentStatus from "@/views/components/articles/components/PatentStatus"
 
 export default {
   components: {
@@ -163,6 +163,9 @@ export default {
   async mounted() {
    await this.getPatent(this.applicationNo)
    this.changePageTitle()
+   this.$nextTick(()=>{
+        this.$set(this,'height',document.getElementsByClassName('el-main')[0].offsetHeight-200  + 'px')
+     })
   },
   methods: {
      //修改title

+ 6 - 5
RMS-FrontEnd/src/views/components/import/conditionImport/patentDetails/patentIndex.vue

@@ -1,7 +1,7 @@
 <template>
     <div style="height:calc(100% - 50px)">
         <div style="background:white;display:flex; justify-content:flex-end;align-items: center;">
-            <el-button type="primary" class="margin-right_10" @click="importToProject">导入到专题库</el-button>
+            <el-button type="primary" class="margin-right_10" @click="importToProject">导入到报告</el-button>
             <el-switch
                 v-model="value"
                 :disabled="!$permission('/workspace/details/comparison')"
@@ -68,7 +68,7 @@ export default {
     importToProject(){
       var params =this.$s.getSession('params').params
       var form = {
-        conditions:"(AN="+ this.applicationNo +")",
+        conditions:"AN="+ this.applicationNo ,
         DBType:params.DBType,
         orderBy:params.OrderBy,
         orderByType:params.OrderByType,
@@ -76,7 +76,8 @@ export default {
         endNumber:0,
         isAddPatentNos:[this.applicationNo],
         isDeletePatentNos:[],
-        projectId:this.$s.getSession('params').projectId
+        reportId:this.$s.getSession('params').reportId,
+        asCompare:this.$s.getSession('params').asCompare
       }
       this.$refs.projectListDialog.open(form)
     },
@@ -111,8 +112,8 @@ export default {
       }
       let params = {
         patentNo: val?val:this.patentNo,
-        id: this.projectId,
-        createFrom:this.projectId?1:0
+        id: this.reportId,
+        createFrom:this.reportId?2:0
       }
       this.$api.scratchWordsQuery(params).then(response => {
         if (response.code==200) {

+ 3 - 2
RMS-FrontEnd/src/views/components/import/conditionImport/search.vue

@@ -42,7 +42,7 @@ export default {
         customSearch,
         searchHistory
     },
-    props:['reportId'],
+    props:['reportId','asCompare'],
     data() {
         return {
             isComponent:'FormSearch',
@@ -94,7 +94,8 @@ export default {
                     condition:val,
                     DBType:this.DBType,
                     reportId:this.reportId?this.reportId:null,
-                    retrieveRecordId:null
+                    retrieveRecordId:null,
+                    asCompare:this.asCompare
                 }
             })
             // this.$s.setSession('retrieveRecordId',0)

+ 17 - 14
RMS-FrontEnd/src/views/components/import/conditionImport/searchResult.vue

@@ -20,7 +20,7 @@
           <p><span>条件:</span>{{ condition }}</p>
         </div>
         <div>
-          <el-button type="primary" size="small" @click="importToProject">导入到专题库</el-button>
+          <el-button type="primary" size="small" @click="importToProject">导入到报告</el-button>
           <el-button size="small" type="warning" @click="handleFieldManage">显示栏位管理</el-button>
           <el-popover placement="bottom" title="" width="220" trigger="click">
             <el-main class="patent-fast-edit-popover" v-loading="selectNumberLoading">
@@ -41,7 +41,7 @@
         </div>
       </el-header>
       <el-main id="patent-list-container" v-loading="loading">
-        <div>
+        <div :style="{height:divHeight+'px'}">
           <component
             ref="patentViewList"
             :is="viewSelected"
@@ -76,10 +76,10 @@
 </template>
 
 <script>
-import PatentViewField from "../dialog/PatentViewField.vue";
-import PatentTableListView from "../view/Table";
-import PatentAbstractListView from "../view/Abstract";
-import PatentPictureListView from "../view/Picture";
+import PatentViewField from "@/views/product/components/relatedPatents/components/dialog/PatentViewField.vue";
+import PatentTableListView from "./view/Table";
+import PatentAbstractListView from "./view/Abstract";
+import PatentPictureListView from "./view/Picture";
 import ProjectListDialog from "./components/projectListDialog.vue";
 export default {
   components: {
@@ -89,7 +89,7 @@ export default {
     PatentPictureListView,
     ProjectListDialog,
   },
-  props: ["condition", "DBType",'reportId','retrieveRecordId'],
+  props: ["condition", "DBType",'reportId','retrieveRecordId','asCompare'],
   data() {
     return {
       pageSizes:[10, 20, 30, 40, 50],
@@ -120,7 +120,8 @@ export default {
         isDelete: [],
         OrderBy:"AD",
         OrderByType:"DESC",
-        retrieveRecordId:this.retrieveRecordId
+        retrieveRecordId:this.retrieveRecordId,
+        asCompare:this.asCompare
       },
       patentViewField: [],
       tableData:[],
@@ -132,6 +133,7 @@ export default {
       endNumber: 0,
       quickSelect: false,
       quickSelectArr:[],
+      divHeight:null
     };
   },
   watch: {},
@@ -142,13 +144,15 @@ export default {
   },
   created() {},
   async mounted() {
-    // console.log(this.$s.getSession('queryParams'),this.queryParams)
     if(this.$s.getSession('queryParams')&&this.$s.getSession('queryParams').params.retrieveRecordId){
         this.queryParams.retrieveRecordId = this.$s.getSession('queryParams').params.retrieveRecordId
       }
-    
+    this.$nextTick(()=>{
+      this.divHeight = document.getElementsByClassName('el-main')[0].offsetHeight - 150
+    })
   await  this.getList();
     this.getPatentViewField();
+    
   },
   methods: {
     //导入到专题库
@@ -162,7 +166,8 @@ export default {
         endNumber:this.selectedTotal>0?this.endNumber:this.total,
         isAddPatentNos:this.queryParams.isAdd,
         isDeletePatentNos:this.queryParams.isDelete,
-        reportId:this.reportId
+        reportId:this.reportId,
+        asCompare:this.asCompare,
       }
       this.$refs.projectListDialog.open(form);
     },
@@ -217,7 +222,6 @@ export default {
     //查询专利
     async getList() {
       let queryParams = JSON.parse(JSON.stringify(this.queryParams));
-
       var params = {
         CurrentQuery: this.condition, //检索式
         DBType: this.DBType, //”CN”或”WD”,表示检索中文库或世界库
@@ -228,7 +232,6 @@ export default {
         retrieveRecordId:this.queryParams.retrieveRecordId
       };
       // console.log(this.$s.getSession('retrieveRecordId'),)
-      
       queryParams.params = params;
       queryParams.reportId = this.reportId
       this.$store.commit("SET_PATENT_PARAMS", queryParams);
@@ -501,4 +504,4 @@ return
     }
   }
 }
-</style>
+</style>

+ 4 - 1
RMS-FrontEnd/src/views/components/import/conditionImport/searchResultIndex.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <search-Result :condition="condition"  :DBType="DBType" :reportId="reportId" :retrieveRecordId="retrieveRecordId"></search-Result>
+    <search-Result :condition="condition"  :DBType="DBType" :reportId="reportId" :retrieveRecordId="retrieveRecordId" :asCompare="asCompare"></search-Result>
   </div>
 </template>
 
@@ -28,6 +28,9 @@ export default {
     },
     retrieveRecordId(){
       return this.$route.query.retrieveRecordId
+    },
+    asCompare(){
+      return this.$route.query.asCompare
     }
   },
   methods: {},

+ 373 - 0
RMS-FrontEnd/src/views/components/import/conditionImport/view/Abstract.vue

@@ -0,0 +1,373 @@
+<template>
+  <div class="patent-abstract-list-view">
+    <div class="patent-abstract-card" v-for="(patent, index) in records">
+      <div class="patent-abstract-card-wrapper">
+        <table class="patent-abstract-card-table">
+          <tbody>
+            <tr>
+              <td v-if="refresh"><el-checkbox :label="patent.id" @change="changeSelect(patent)" :checked="selected.indexOf(patent.id) !== -1 || patentNoList.indexOf(patent.patentNo)!== -1"></el-checkbox></td>
+              <td>
+                <div class="patent-abstract-index-container">
+                  <span>{{ (index + 1) + ((params.current - 1) * params.size) }}</span>
+                  <span v-if="reportId">
+                    <el-tag :type="patent.read === 0 ? 'danger' : 'success'" v-if="$permission('/workspace/folder/isRead')" effect="dark" size="small" @click="handleChangeRead(patent)">{{ readType[patent.read] }}</el-tag>
+                    <el-tag type="info" v-else effect="dark" size="small" >{{ readType[patent.read] }}</el-tag>
+                  </span>
+                  
+                </div>
+                <!-- <el-popover placement="right-start" width="600" trigger="hover">
+                  <img :src="getPatentAbstractImage(patent.abstractPath)" height="400" width="100%">
+                  <div class="patent-abstract-image-container" slot="reference">
+                    <img :src="getPatentAbstractImage(patent.abstractPath)">
+                  </div>
+                </el-popover> -->
+                <div class="picture text-align_center patent-abstract-image-container" style="">
+                    <el-image v-if="(!reportId && patent.abstractPath2)||reportId" :src="patent.abstractPath2?patent.abstractPath2:getImagePath1(patent)" :preview-src-list="[patent.abstractPath2]" style="margin:0 auto;vertical-align:middle;" :style="{width:patent.imgWidth?patent.imgWidth:'100%',height:patent.imgHeight?patent.imgHeight:'100%'}">
+                    <div slot="error" class="image-slot">
+                      <el-image :src="getErrorImage(patent)" :preview-src-list="[getErrorImage(patent)]">
+                        <div slot="error" class="image-slot">
+                          <img src="https://www.patentstar.com.cn/img/Common/nopic.jpg" alt="" style="">
+                        </div>
+                      </el-image>
+                    </div>
+                  </el-image>
+
+                </div>
+                <div class="patent-abstract-pdf-button-container">
+                  <el-button :disabled="!$permission('/workspace/folder/PDFdownload')" class="width_100" size="small" type="primary" @click="handleDownload(patent)">PDF 下载</el-button>
+                </div>
+              </td>
+              <td width="850px">
+                <div class="patent-abstract-title">
+                  <el-link :disabled="!$permission('/workspace/details')" :class="$permission('/workspace/details')?'':'jinzhi'" type="success" @click.native="handleLink(patent)">
+                    <span v-html="getViewDom(patent.patentNo)"></span>
+                  </el-link>
+                  <el-tag class="margin-left_10" type="primary" effect="dark" size="small" v-if="patent.simpleStatus">{{ patent.simpleStatus }}</el-tag>
+                </div>
+                <div style="font-size: 13px;">
+                  <el-row>
+                    <el-col :span="24" v-if="t()">
+                      <span class="patent-abstract_label">标题:</span>
+                      <span class="patent-abstract_text">
+                        <span v-html="getViewDom2(patent, 'name')"></span>
+                        <el-link v-if="reportId" type="primary" @click.native="handleChange(patent, 'name')" style="margin-left: 10px;">
+                          <span v-if="!patent.change">切换译文</span>
+                          <span v-else>切换原文</span>
+                        </el-link>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row>
+                    <el-col :span="8" v-if="t()">
+                      <span class="patent-abstract_label">申请日:</span>
+                      <span class="patent-abstract_text">
+                        <span v-html="getViewDom(patent.applicationDate)"></span>
+                      </span>
+                    </el-col>
+                    <el-col :span="8" v-if="t()">
+                      <span class="patent-abstract_label">公开日:</span>
+                      <span class="patent-abstract_text">
+                        <span v-html="getViewDom(patent.publicDate)"></span>
+                      </span>
+                    </el-col>
+                    <el-col :span="8" v-if="t()">
+                      <span class="patent-abstract_label">申请号:</span>
+                      <span class="patent-abstract_text">
+                        <span v-html="getViewDom(patent.applicationNo)"></span>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t()">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">权利人:</span>
+                      <span class="patent-abstract_text" v-if="patent.applicant">
+                        <template v-for="(item, index) in patent.applicant.filter(a => a.dataType === 1)">
+                          <el-link type="primary">
+                            <span v-html="getViewDom(item.name)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t()">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">申请人:</span>
+                      <span class="patent-abstract_text" v-if="patent.applicant">
+                        <template v-for="(item, index) in patent.applicant.filter(a => a.dataType === 2)">
+                          <el-link type="primary">
+                            <span v-html="getViewDom(item.name)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t()">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">发明人:</span>
+                      <span class="patent-abstract_text">
+                        <template v-for="(item, index) in patent.inventor">
+                          <el-link type="primary">
+                            <span v-html="getViewDom(item.name)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t()">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">IPC分类号:</span>
+                      <span class="patent-abstract_text">
+                        <template v-for="(item, index) in patent.ipcList">
+                          <el-link type="primary">
+                            <span v-html="getViewDom(item)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t('simpleFamily')">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">简单同族:</span>
+                      <span class="patent-abstract_text">
+                        <template v-for="(item, index) in patent.family.simple">
+                          <el-link type="primary" @click.native="handleFamily(item)">
+                            <span v-html="getViewDom(item)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t('inpadocFamily')">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">INPADOC同族:</span>
+                      <span class="patent-abstract_text">
+                        <template v-for="(item, index) in patent.family.inpadoc">
+                          <el-link type="primary" @click.native="handleFamily(item)">
+                            <span v-html="getViewDom(item)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t('patSnapFamily')">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">PatSnap同族:</span>
+                      <span class="patent-abstract_text">
+                        <template v-for="(item, index) in patent.family.patSnap">
+                          <el-link type="primary" @click.native="handleFamily(item)">
+                            <span v-html="getViewDom(item)"></span>
+                          </el-link>
+                          <span class="patent-abstract_semicolon">;</span>
+                        </template>
+                      </span>
+                    </el-col>
+                  </el-row>
+                  <el-row v-if="t()">
+                    <el-col :span="24">
+                      <span class="patent-abstract_label">摘要:</span>
+                      <div>
+                        <span v-html="getViewDom2(patent, 'abstractStr')"></span>
+                        <el-link v-if="reportId" type="primary" @click.native="handleChange(patent, 'abstractStr')">
+                          <span v-if="!patent.change2">切换译文</span>
+                          <span v-else>切换原文</span>
+                        </el-link>
+                      </div>
+                    </el-col>
+                  </el-row>
+                </div>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { commonMixins } from "@/views/components/articles/components/mixins"
+import { patentViewList, patentKeywordsHighlight } from '@/views/components/common/mixins'
+
+export default {
+  props: ['viewField'],
+  mixins: [patentViewList, patentKeywordsHighlight,commonMixins],
+  data() {
+    return {
+      checkList: [],
+      readType: {
+        1: '已读',
+        0: '未读'
+      },
+      statusType: {
+
+      },
+      row: {}
+    }
+  },
+  watch: {
+    records(val,oldval) {
+      if(val != oldval){
+        this.$nextTick(() => {
+          this.addRecords()
+          this.refreshCheckBox()
+        })
+      }
+      
+    }
+  },
+  computed: {
+    columnList() {
+      return this.viewField.filter(item => !item.hidden)
+    },
+    customField() {
+      return this.viewField.filter(item => !item.hidden && (item.type !== 'list' || item.key === 'label'))
+    },
+  },
+  mounted() {
+
+  },
+  methods: {
+    handleFamily(item) {
+      this.$api.getPatentIdByPatentNo({ patentNo: item }).then(response => {
+        if (response.data === 0) {
+          this.$alert('专利暂未收录', '请求错误', {
+            confirmButtonText: '确定',
+            type: 'error',
+            callback: action => {}
+          });
+        } else {
+          this.handleLink({ id: response.data })
+        }
+      })
+    },
+    getColumnValue(patent, column) {
+      if (column.key !== 'label') {
+        const field = patent.field.find(item => item.id === parseInt(column.key))
+        if (field) {
+          return field.selected
+        }
+      } else {
+        return patent.label.map(item => item.name)
+      }
+      return []
+    },
+    handleIndexSetting(row, field) {
+      this.$emit('index-setting', row, field)
+    },
+    t(key) {
+      if (key) {
+        return this.columnList.map(item => item.key).indexOf(key) !== -1
+      }
+      return true
+    },
+    getPatentAbstractImage(path) {
+      if (!path) {
+        return ''
+      }
+      return this.$p + path
+    },
+    openPatentAbstractImage(abstractPath) {
+      // console.log(abstractPath)
+    },
+    handleDownload(patent) {
+      this.$emit('download', patent)
+    },
+    handleChangeRead(patent) {
+      const status = patent.read === 1 ? 0 : 1
+      this.$emit('change-read', [patent.id], status)
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+.patent-abstract-list-view {
+  .patent-abstract-card {
+    width: 100%;
+    border-bottom: 1px solid #e5e5e5;
+    .patent-abstract-card-wrapper {
+      padding: 10px;
+      min-height: 200px;
+      .patent-abstract-card-table {
+        height: 100%;
+        .patent-abstract-index-container {
+          font-size: 13px;
+          padding-left: 10px;
+          margin-bottom: 10px;
+          .el-tag {
+            margin-left: 10px;
+            cursor: pointer;
+          }
+        }
+        .patent-abstract-image-container {
+          // padding: 10px;
+          border: 1px solid #bcc2cc;
+          border-radius: 4px;
+          width: 120px;
+          height: 150px;
+          line-height: 150px;
+          // img {
+          //   width: 100%;
+          //   height: 100%;
+          // }
+        }
+        .patent-abstract-pdf-button-container {
+          text-align: center;
+          margin-top: 10px;
+        }
+        .patent-abstract-title {
+          margin-bottom: 5px;
+        }
+        .patent-custom-field {
+          line-height: 35px;
+          font-size: 14px;
+          border-bottom: 1px solid #ebecf0;
+          .name {
+            width: 200px;
+            float: left;
+          }
+          .data {
+            width: calc(100% - 200px);
+            float: right;
+          }
+        }
+        .patent-abstract_label {
+          color: #495973;
+          padding-right: 8px;
+        }
+        .patent-abstract_text {
+          .el-link {
+            position: relative;
+            top: -2px;
+          }
+        }
+        .patent-abstract_semicolon {
+          padding-left: 5px;
+          padding-right: 5px;
+          display: inline-block;
+          color: #495973;
+        }
+        tbody, tr, td {
+          height: 100%;
+          vertical-align: top;
+        }
+      }
+      .el-checkbox__label {
+        display: none;
+      }
+    }
+  }
+  .el-card__header {
+    font-weight: normal;
+    font-size: 14px;
+    padding: 18px 20px;
+    border-bottom: 1px solid #EBEEF5;
+  }
+}
+</style>

+ 89 - 0
RMS-FrontEnd/src/views/components/import/conditionImport/view/Picture.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="pic">
+    <div class="item" style="padding:10px;display: flex;flex-wrap: wrap;">
+      <!-- <el-row :gutter="24" style="padding: 10px;display: flex;flex-wrap: wrap;">
+      <el-col :span="6" v-for="(item,index) in records" class="c"> -->
+        <el-card  shadow="hover" v-for="(item,index) in records" style="width:200px" >
+          <div slot="header" style="width: 100%; white-space: nowrap;overflow-x: hidden;text-overflow: ellipsis;font-size:12px;" >
+            <div>序号:{{ (index + 1) + ((params.current - 1) * params.size) }}</div>
+            <el-divider></el-divider>
+            <!-- <hr style="background-color: #DCDFE6;"> -->
+           <span v-if="refresh"> <el-checkbox :label="item.id" @change="changeSelect(item)" :checked="selected.indexOf(item.id) !== -1 || patentNoList.indexOf(item.patentNo)!== -1">
+              
+                <el-link  :disabled="!$permission('/workspace/details')" :class="$permission('/workspace/details')?'':'jinzhi'" :type="item.read === 1 ? 'success' : 'danger'" @click.native.prevent="handleLink(item)">
+                  <span v-html="getViewDom(item.patentNo)"></span>
+                </el-link>
+              
+            </el-checkbox>  </span>
+            <el-tooltip effect="dark" :content="item.name" placement="top">
+                <span style="" v-html="getViewDom(item.name)"></span>
+              </el-tooltip>
+          </div>
+          <div class="picture text-align_center" style="height: 200px;width:100%;line-height:200px;">
+              <el-image v-if="(!reportId && item.abstractPath2)||reportId" :src="item.abstractPath2?item.abstractPath2:getImagePath1(item)" :preview-src-list="[item.abstractPath2]" style="margin:0 auto;vertical-align:middle;" :style="{width:item.imgWidth?item.imgWidth:'100%',height:item.imgHeight?item.imgHeight:'100%'}">
+              <div slot="error" class="image-slot">
+                <el-image :src="getErrorImage(item)" :preview-src-list="[getErrorImage(item)]">
+                  <div slot="error" class="image-slot">
+                    <img src="https://www.patentstar.com.cn/img/Common/nopic.jpg" alt="" style="">
+                  </div>
+                </el-image>
+              </div>
+            </el-image>
+
+          </div>
+        </el-card>
+<!--      
+      </el-col>
+    </el-row> -->
+    </div>
+  </div>
+</template>
+
+<script>
+import { commonMixins } from "@/views/components/articles/components/mixins"
+import { patentViewList, patentKeywordsHighlight } from '@/views/components/common/mixins'
+export default {
+  props: [],
+  mixins:[commonMixins,patentViewList, patentKeywordsHighlight ],
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    // records() {
+    //   return this.$store.state.patent.records
+    // }
+  },
+  watch: {
+    records(val,oldval) {
+      if(val != oldval){
+        this.$nextTick(() => {
+          this.addRecords()
+          this.refreshCheckBox()
+        })
+      }
+    }
+  },
+  mounted() {
+
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss">
+ .pic{
+  .el-divider{
+    margin: 5px 0px;
+  }
+  .el-card__header{
+    padding:5px !important
+  }
+  .el-card__body{
+    padding:0px !important
+  }
+ }
+</style>

+ 302 - 0
RMS-FrontEnd/src/views/components/import/conditionImport/view/Table.vue

@@ -0,0 +1,302 @@
+<template>
+  <div class="patent-table-list-view">
+    <el-table
+        v-if="refreshData"
+        ref="table"
+        class="view-table"
+        :data="records"
+        style=""
+        border
+        :height="tableHeight"
+        header-row-class-name="custom-table-header"
+        @cell-click="handleClick"
+        :cell-class-name="cellClassName"
+    >
+      <el-table-column width="80" align="center">
+        <template slot="header">
+          <patent-table-view-sort prop="id" @on-sort="onSort" />
+        </template>
+        <template slot-scope="scope">
+          <div v-if="refresh">
+            <el-checkbox :label="scope.row.id" @change="changeSelect(scope.row)" :checked="selected.indexOf(scope.row.id) !== -1 || patentNoList.indexOf(scope.row.patentNo)!== -1 || patentNoList.indexOf(scope.row.applicationNo)!== -1 ">
+              <span>{{ (scope.$index + 1) + ((params.current - 1) * params.size) }}</span>
+            </el-checkbox>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="专利号" show-overflow-tooltip align="center" width="180">
+        <template slot="header">
+          <patent-table-view-sort title="专利号" prop="patentNo" @on-sort="onSort" />
+        </template>
+        <template slot-scope="scope">
+          <el-popover placement="right-start" width="500" trigger="hover" >
+            <table class="patent-popover-table" >
+              <tr>  
+                <td>
+                  <div class="patent-abstract-image text-align_center" >
+                    <!-- <img :src="getPatentAbstractImage(scope.row.abstractPath)"> -->
+                    <!-- <img :src="getImagePath1(scope.row)"> -->
+                    <el-image v-if="(!reportId && scope.row.abstractPath2)||reportId" :src="scope.row.abstractPath2?scope.row.abstractPath2:getImagePath1(scope.row)" :preview-src-list="[scope.row.abstractPath2]" style="vertical-align:middle;" :style="{width:scope.row.imgWidth?scope.row.imgWidth:'100%',height:scope.row.imgHeight?scope.row.imgHeight:'100%'}">
+                      <div slot="error" class="image-slot">
+                        <el-image :src="getErrorImage(scope.row)" :preview-src-list="[getErrorImage(scope.row)]">
+                          <div slot="error" class="image-slot">
+                            <img src="https://www.patentstar.com.cn/img/Common/nopic.jpg" alt="" style="">
+                          </div>
+                        </el-image>
+                      </div>
+                    </el-image>
+                  </div>
+                </td>
+                <td>
+                  <p v-html="getViewDom2(scope.row, 'abstractStr')"></p>
+                  <el-link v-if="reportId" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
+                    <span v-if="!scope.row.change2">切换译文</span>
+                    <span v-else>切换原文</span>
+                  </el-link>
+                </td>
+              </tr>
+            </table>
+            <el-link slot="reference" :disabled="!$permission('/workspace/details')" :class="$permission('/workspace/details')?'':'jinzhi'" :type="scope.row.read === 1 ? 'success' : 'danger'" @click.native="handleLink(scope.row,scope.$index)">
+              <span v-html="getViewDom(scope.row.patentNo)"></span>
+            </el-link>
+          </el-popover>
+        </template>
+      </el-table-column>
+      <el-table-column v-for="column in columnList" :label="column.name" show-overflow-tooltip align="center">
+        <template slot="header">
+          <patent-table-view-sort :title="column.name" :prop="column.key" :reportId="reportId" @on-sort="onSort" />
+        </template>
+        <template slot-scope="scope">
+          <div style="" v-for="data in getColumnValue(scope.row, column)">
+            <template v-if="column.key === 'name'">
+              <span v-html="getViewDom2(scope.row, 'name')"></span>
+              <br>
+              <el-link v-if="reportId" type="primary" @click.native="handleChange(scope.row, 'name')">
+                <span v-if="!scope.row.change">切换译文</span>
+                <span v-else>切换原文</span>
+              </el-link>
+            </template>
+            <template v-else-if="column.key === 'abstractStr'">
+              <span v-html="getViewDom2(scope.row, 'abstractStr')"></span>
+              <br>
+              <el-link v-if="reportId" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
+                <span v-if="!scope.row.change2">切换译文</span>
+                <span v-else>切换原文</span>
+              </el-link>
+            </template>
+            <template v-else>
+              <span v-html="getViewDom(data)"></span>
+            </template>
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+import { commonMixins } from "@/views/components/articles/components/mixins.js"
+import { patentViewList, patentKeywordsHighlight } from '@/views/components/common/mixins'
+import PatentTableViewSort from "./TableSort";
+
+export default {
+  props: ['viewField'],
+  mixins: [patentViewList, patentKeywordsHighlight,commonMixins],
+  components: {
+    PatentTableViewSort
+  },
+  data() {
+    return {
+      tableData: [],
+      tableHeight: null,
+      refreshData: false
+    }
+  },
+  watch: {
+    viewField: {
+      handler(n, o) {
+        this.refreshTable()
+      },
+      deep: true
+    },
+    records(val,oldval) {
+      
+      if(val != oldval){
+        this.$nextTick(() => {
+          this.addRecords()
+          this.refreshCheckBox()
+          this.setHeight()
+        })
+      }
+      
+    },
+    refreshData(val){
+      if(val){
+        this.$nextTick(()=>{
+          this.setHeight()
+        })
+        
+      }
+    }
+  },
+  activated() {
+    // this.refreshTable()
+  },
+  computed: {
+    columnList() {
+      return this.viewField.filter(item => !item.hidden)
+    }
+  },
+  created(){
+
+  },
+  mounted() {
+    if(this.viewField.length>0){
+      this.refreshTable()
+    }
+    this.$nextTick(()=>{
+      this.addRecords()
+    })
+    // console.log(this.columnList);
+  },
+  methods: {
+    getPatentAbstractImage(path) {
+      if (!path) {
+        return ''
+      }
+      return this.$p + path
+    },
+    onSort(data) {
+      this.$emit('on-sort', data)
+    },
+    setHeight() {
+      const offsetTop = window.innerHeight -320
+      const body = document.querySelector('.el-table__body')
+      if (!body) {
+        return false
+      }
+      const offsetBodyHeight = body.offsetHeight
+      if (this.records.length && offsetBodyHeight < offsetTop) {
+        this.tableHeight = offsetBodyHeight + 75
+      } else if (!this.records.length) {
+        this.tableHeight = null
+      } else {
+        this.tableHeight = offsetTop
+      }
+    },
+    refreshTable() {
+      this.refreshData = false
+      this.$nextTick(() => {
+        this.refreshData = true
+      })
+    },
+    getColumnValue(row, column) {
+      if (column.type !== 'list') {
+        const field = row.field.find(item => item.id === parseInt(column.key))
+        if (field) {
+          return field.selected
+        }
+      } else if (column.key === 'label') {
+        if(row.label)
+        return row.label.map(item => item.name)
+      } else {
+        const value = row[column.key]
+        if (column.key === 'inventor' || column.key === 'agent') {
+          if(value)
+          return value.map(item => item.name)
+        }
+        if (column.key === 'applicant1') {
+          if(row.applicant)
+          return row.applicant.filter(a => a.dataType === 1).map(item => item.shortName)
+        }
+        if (column.key === 'applicant2') {
+          if(row.applicant)
+          return row.applicant.filter(a => a.dataType === 1).map(item => item.name)
+        }
+        if (column.key === 'applicant3') {
+          if(row.applicant)
+          return row.applicant.filter(a => a.dataType === 2).map(item => item.shortName)
+        }
+        if (column.key === 'applicant4') {
+          if(row.applicant)
+          return row.applicant.filter(a => a.dataType === 2).map(item => item.name)
+        }
+        if (column.key === 'simpleFamily') {
+          return [row.family.simple.length]
+        }
+        if (column.key === 'inpadocFamily') {
+          return [row.family.inpadoc.length]
+        }
+        if (column.key === 'patSnapFamily') {
+          return [row.family.patSnap.length]
+        }
+        if (column.key === 'agency' && value) {
+          return [value.name]
+        }
+        if (value instanceof Array) {
+          return value
+        } else if (typeof value === 'string' || typeof value === 'number') {
+          return [value]
+        }
+        return ''
+      }
+    },
+    cellClassName({ row, column, rowIndex, columnIndex }) {
+      if (this.validationCustomField(column.label)) {
+        return 'custom-field-cell'
+      }
+    },
+    validationCustomField(label) {
+      const customField = this.viewField.filter(item => item.type !== 'list' || item.key === 'label')
+      const field = customField.find(item => item.name === label)
+      if (field) {
+        return field
+      }
+      return false
+    },
+    handleClick(row, column, cell,event) {
+
+      const field = this.validationCustomField(column.label)
+      if (field) {
+        this.$emit('index-setting', row, field)
+      }
+    },
+  }
+}
+</script>
+
+<style lang="scss">
+.patent-popover-table {
+  tbody, tr, td {
+    height: 100%;
+    vertical-align: top;
+  }
+  p {
+    padding: 0 !important;
+    margin: 0 !important;
+  }
+  .patent-abstract-image {
+    padding: 10px;
+    border: 1px solid #bcc2cc;
+    border-radius: 4px;
+    width: 120px;
+    height: 150px;
+    line-height: 150px;
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+.patent-table-list-view {
+  .view-table {
+    width: 100%;
+  }
+  .el-table .cell {
+    white-space: pre-line !important;
+  }
+  .custom-field-cell {
+    cursor: pointer;
+  }
+}
+</style>

+ 117 - 0
RMS-FrontEnd/src/views/components/import/conditionImport/view/TableSort.vue

@@ -0,0 +1,117 @@
+<template>
+  <div>
+    <span>{{ title }}</span>
+    <template v-if="showList.indexOf(prop) !== -1">
+      <el-dropdown size="small" :class="{ 'float_right' : title !== '' }">
+        <div class="el-dropdown-link">
+          <i class="el-icon-arrow-down el-icon--right"></i>
+        </div>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item v-for="item in dropdown[type]" @click.native="handleClick(item)">
+            <i :class="item.icon"></i>
+            <span>{{ item.label }}</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+    </template>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    title: {
+      type: String,
+      default: ''
+    },
+    prop: {
+      type: String,
+      default: null
+    },
+    projectId: {
+      // type: Number,
+      default: null
+    }
+  },
+  data() {
+    return {
+      type: 1,
+      dropdown: [[
+        {
+          label: '最旧 -> 最新',
+          value: 'asc',
+          icon: 'el-icon-top'
+        },
+        {
+          label: '最新 -> 最旧',
+          value: 'desc',
+          icon: 'el-icon-bottom'
+        },
+      ], [
+        {
+          label: 'A -> Z',
+          value: 'asc',
+          icon: 'el-icon-top'
+        },
+        {
+          label: 'Z -> A',
+          value: 'desc',
+          icon: 'el-icon-bottom'
+        },
+      ], [
+        {
+          label: '0 -> 9',
+          value: 'asc',
+          icon: 'el-icon-top'
+        },
+        {
+          label: '9 -> 0',
+          value: 'desc',
+          icon: 'el-icon-bottom'
+        },
+      ]],
+      showList: [
+        'id',
+        'publicAccreditDate',
+        'publicDate',
+        'applicationDate',
+        'rightNum',
+        'quoteNum',
+        'quotedNum',
+        'name',
+        'patentNo',
+        'applicationNo',
+        '',
+        '',
+      ]
+    }
+  },
+  mounted() {
+    if (['id', 'publicAccreditDate', 'publicDate', 'applicationDate'].indexOf(this.prop) !== -1) {
+      this.type = 0
+    }
+    if (['rightNum', 'quoteNum', 'quotedNum'].indexOf(this.prop) !== -1) {
+      this.type = 2
+    }
+    if(!this.projectId){
+      this.showList= [
+        'publicAccreditDate',
+        'publicDate',
+        'applicationDate',
+      ]
+    }
+  },
+  methods: {
+    handleClick(item) {
+      this.$emit('on-sort', {
+        prop: this.prop,
+        order: item.value
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+
+</style>

+ 3 - 2
RMS-FrontEnd/src/views/components/import/excelImport/importPatent.vue

@@ -36,7 +36,7 @@
 // import systemTask from './systemTask.vue'
 import systemTask from '@/views/components/task/index.vue'
 export default {
-  props:['reportId'],
+  props:['reportId','asCompare'],
   components: {
     systemTask
   },
@@ -73,7 +73,8 @@ export default {
         reportId: this.reportId,
         sourceId:this.sourceId,
         fieldList: [],
-        folderIds: refs.folderTree ? refs.folderTree.getCheckedKeys() : []
+        folderIds: refs.folderTree ? refs.folderTree.getCheckedKeys() : [],
+        asCompare:this.asCompare
       }
       for (let uid in json.field) {
         const field = json.field[uid]

+ 4 - 1
RMS-FrontEnd/src/views/components/import/excelImport/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <importPatent :reportId="id"></importPatent>
+    <importPatent :reportId="id" :asCompare="asCompare"></importPatent>
   </div>
 </template>
 
@@ -18,6 +18,9 @@ export default {
   computed: {
     id() {
       return this.$route.query.id
+    },
+    asCompare() {
+      return this.$route.query.asCompare
     }
   },
   mounted() {

+ 21 - 1
RMS-FrontEnd/src/views/layout/components/UserBar.vue

@@ -10,7 +10,10 @@
         <el-dropdown-menu>
           <!-- <el-dropdown-item command="userinfo">个人信息</el-dropdown-item> -->
           <el-dropdown-item command="changePwd" v-if="$permission('/admin/updatePassword')" >修改密码</el-dropdown-item>
+          <el-dropdown-item command="setStyle">文本样式设置</el-dropdown-item>
+          <el-dropdown-item command="taskList">任务清单</el-dropdown-item>
           <el-dropdown-item command="AnalysisSystem" v-if="$permission('/pcs/analysisSystem')">分析系统</el-dropdown-item>
+          
           <el-dropdown-item command="clientble" v-if="$permission('/rms/clientManage')">客户管理</el-dropdown-item>
           <el-dropdown-item command="product" v-if="$permission('/rms/product')">产品管理</el-dropdown-item>
           <el-dropdown-item command="set">设置</el-dropdown-item>
@@ -57,6 +60,7 @@
     <el-dialog width="1000px" title="客户管理" :visible.sync="clientVisible" >
         <ClientManage></ClientManage>
     </el-dialog>
+    <Set-Style ref="setStyle"></Set-Style>
   </div>
 </template>
 
@@ -64,10 +68,13 @@
 import { mapGetters } from "vuex";
 import ProjectField from './field';
 import ClientManage from './clientManage.vue'
+
+import SetStyle from "./setStyle.vue";
 export default {
   components:{
     ProjectField,
-    ClientManage
+    ClientManage,
+    SetStyle
   },
   data() {
     const validateRepeat = (rule, value, callback) => {
@@ -151,6 +158,9 @@ export default {
             this.$router.push({ path: '/admin/login' })
           })
           break;
+        case 'setStyle':
+          this.$refs.setStyle.open()
+          break;
         case 'changePwd':
           this.resetChangePwdRuleForm()
           this.changePwdDialogVisible = true
@@ -174,8 +184,18 @@ export default {
           break;
         case 'userinfo':
           break;
+        case 'taskList':
+          this.toTaskList()
+          break;
       }
     },
+     //跳转到任务清单
+     toTaskList(){
+      const router = this.$router.resolve({
+        path: '/taskList',
+      })
+      window.open(router.href,'_blank')
+    },
     submitChangePwd() {
       this.$refs.changePwdRuleForm.validate((valid) => {
         if (valid) {

+ 69 - 0
RMS-FrontEnd/src/views/layout/components/setStyle.vue

@@ -0,0 +1,69 @@
+<template>
+    <div>
+        <el-dialog title="样式设置" :visible.sync="styleVisible" width="600px">
+            <div>
+                <el-form :model="form" label-position="right" label-width="100px">
+                    <el-form-item label="字体大小:">
+                        <el-input-number v-model="form.size" controls-position="right" size="small" :min="12" ></el-input-number>
+                    </el-form-item>
+                    <el-form-item label="行间距:">
+                        <el-input-number v-model="form.lineHeight" controls-position="right" size="small" :min="1" :step="0.1" :precision="1"></el-input-number>
+                    </el-form-item>
+                    <el-form-item label="边距:" >
+                        <div style="display:flex">
+                           <p style="margin:0"><span>上:</span><span><el-input-number v-model="form.padding[0]" controls-position="right" size="small" :min="0" style="width:80px"></el-input-number></span></p>
+                            <p style="margin:0"><span>下:</span><span><el-input-number v-model="form.padding[2]" controls-position="right" size="small" :min="0" style="width:80px"></el-input-number></span></p>
+                            <p style="margin:0"><span>左:</span><span><el-input-number v-model="form.padding[3]" controls-position="right" size="small" :min="0" style="width:80px"></el-input-number></span></p>
+                            <p style="margin:0"><span>右:</span><span><el-input-number v-model="form.padding[1]" controls-position="right" size="small" :min="0" style="width:80px"></el-input-number></span></p> 
+                        </div>
+                    </el-form-item>
+                </el-form>
+                <div style="margin:15px 0">
+                    <el-divider content-position="left">预览</el-divider>
+                    <div style="border:1px solid black;width:500px;margin:15px auto;" :style="{'font-size':form.size+'px','line-height':form.lineHeight,padding:form.padding[0]+'px '+form.padding[1]+'px '+form.padding[2]+'px '+form.padding[3]+'px',}">
+                        本系统为用户提供了一种知识产权风控体系和组织记忆的操作思路和方法,通过解决企业具体问题场景的方式,为用户提供了具有可操作性的参考,并由此协助企业形成自主知识传承、叠加、不断衍化提升并且能够重复再应用的核心智谋知识系统。
+                    </div>
+                </div>
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="styleVisible = false">取 消</el-button>
+                <el-button type="primary" @click="submit">确 定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            styleVisible:false,
+            form:{
+                size:16,
+                lineHeight:1.8,
+                padding:[5,5,5,5]
+            }
+        }
+    },
+    computed:{
+    },
+    mounted() {
+        if(localStorage.style){
+            this.form = JSON.parse(localStorage.style)
+        }
+        this.$store.commit('SET_PATENT_STYLE', JSON.parse(JSON.stringify(this.form)))
+    },
+    methods:{
+        submit(){
+            localStorage.style = JSON.stringify(this.form)
+            this.$store.commit('SET_PATENT_STYLE',JSON.parse(JSON.stringify(this.form)))
+            this.styleVisible = false
+        },
+        open(){
+            if(localStorage.style){
+                this.form = JSON.parse(localStorage.style)
+            }
+            this.styleVisible = true
+        }
+    }
+}
+</script>

+ 11 - 1
RMS-FrontEnd/src/views/report/FTO/FTOPage/ChosePatent.vue

@@ -13,7 +13,17 @@
     <el-container>
       <el-main>
         <div style="display:flex;justify-content: flex-end;padding-bottom:20px">
-          <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button>
+          <!-- <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button> -->
+          <el-dropdown @command="importPatent($event,reportId)" type="primary" size="small" style="margin-right:10px;">
+                <el-button type="primary" size="small" >
+                  导入专利<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu  class="children_item">
+                <el-dropdown-item command="1">专利号导入</el-dropdown-item>
+                <el-dropdown-item command="2">Excel导入</el-dropdown-item>
+                <el-dropdown-item command="3">检索导入</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
           <div class="btn1" @click="sift" style="width:80px;height:32px;display:flex;justify-content:space-around;border-radius:5px; cursor: pointer;">
             <img src="../../../../assets/img/filtrationSearch.png" alt="" style="width:16px;height:16px;margin-top:9px;margin-left:8px"><p style="margin:0 8px 0 0;line-height:32px;color:white;font-size:14px">筛选 </p> 
           </div>

+ 11 - 1
RMS-FrontEnd/src/views/report/Invalid/InvalidPage/ChosePatent.vue

@@ -71,7 +71,17 @@
               <!-- <el-button type="info" style="height:32px">
                 <img src="../../../../../assets/img/filtrationSearch.png" alt="" style="width:20px">筛选 
               </el-button> -->
-                <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button>
+                <!-- <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button> -->
+              <el-dropdown @command="importPatent($event,reportId)" type="primary" size="small" style="margin-right:10px">
+                <el-button type="primary" size="small" >
+                  导入专利<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu  class="children_item">
+                <el-dropdown-item command="1">专利号导入</el-dropdown-item>
+                <el-dropdown-item command="2">Excel导入</el-dropdown-item>
+                <el-dropdown-item command="3">检索导入</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
                 <div class="btn1" @click="sift" style="width:80px;height:32px;display:flex;justify-content:space-around;border-radius:5px; cursor: pointer;">
                   <img src="../../../../assets/img/filtrationSearch.png" alt="" style="width:16px;height:16px;margin-top:9px;margin-left:8px"><p style="margin:0 8px 0 0;line-height:32px;color:white;font-size:14px">筛选 </p> 
                 </div>

+ 1 - 1
RMS-FrontEnd/src/views/report/InvalidResponse/components/FileDetails/index.vue

@@ -230,7 +230,7 @@ export default {
       let params = {
         patentNo: val,
         id: this.params.reportId,
-        createFrom:2
+        createFrom:this.params.reportId?2:0
       }
       this.$api.scratchWordsQuery(params).then(response => {
         if (response.code==200) {

+ 17 - 3
RMS-FrontEnd/src/views/report/InvalidResponse/components/InvalidIndex.vue

@@ -3,7 +3,8 @@
   <div>
     <div style="display:flex;justify-content: flex-end;margin-bottom:10px">
       <el-button type="primary" size="small" @click="addInvalid">添加无效证据</el-button>
-      <el-button type="primary" size="small" @click="addCourtOpinion">添加法院意见</el-button>
+      <!-- <el-button type="primary" size="small" @click="addCourtOpinion">添加法院意见</el-button> -->
+      <el-button type="primary" size="small" @click="addCourtOpinion" v-if="this.tableField2.findIndex(item=>{return item.fieldKey.slice(-1) == 2})==-1">添加法院二审</el-button>
       <el-button type="primary" size="small" @click="openField">显示栏位管理</el-button>
       <el-button type="primary" size="small" @click="exportInvalid" :loading="btnLoading">导出无效理由</el-button>
     </div>
@@ -461,8 +462,21 @@ export default {
     },
     //添加法院意见
     addCourtOpinion(){
-      var form = {}
-      this.$refs.addOrEditField.open(form)
+      // var form = {}
+      // this.$refs.addOrEditField.open(form)
+      var params ={
+        "reportId": this.reportId,
+        "fieldName": "法院二审",
+        "fieldKey": "courtOptions2",
+        "fieldState": 1
+      }
+      this.$api.addOrUpdateInvalidFields(params).then(response=>{
+        if(response.code == 200){
+            this.$message.success('添加成功')
+            this.queryInvalidFields()
+        }
+      }).catch(error=>{
+      })
     },
     //获取自定义栏位
     queryInvalidFields(){

+ 1 - 1
RMS-FrontEnd/src/views/report/InvalidResponse/components/TableField.vue

@@ -42,7 +42,7 @@
             </el-checkbox>
             <span style="float:right">
               <i class="el-icon-delete" @click.prevent="delField(option)" style="font-size:16px"></i>
-              <i class="iconfont icon-bianji margin-left_10" @click.prevent="editField(option)"></i>
+              <!-- <i class="iconfont icon-bianji margin-left_10" @click.prevent="editField(option)"></i> -->
             </span>
           </p>
         </el-checkbox-group>

+ 25 - 4
RMS-FrontEnd/src/views/report/components/CreateReport.vue

@@ -8,9 +8,11 @@
             <el-form-item :label="[3].includes(Number(form.type))?'标的产品':'标的专利'" prop="signPatentNo">
               <el-input v-model="form.signPatentNo" autocomplete="off" :placeholder="[3].includes(Number(form.type))?'请输入标的产品':'请输入标的专利'" @change="getPatentNo"></el-input>
               <p v-if="show==1" class="tips">查不到该专利请
-                <el-upload style="display:inline-block;width: 30px !important;" ref="uploads" class="upload-file" action="#" :auto-upload="false" :show-file-list="false" :on-change="onChange1">
+                <!-- <el-upload style="display:inline-block;width: 30px !important;" ref="uploads" class="upload-file" action="#" :auto-upload="false" :show-file-list="false" :on-change="onChange1">
                   <span>导入</span>
-                </el-upload></p>
+                </el-upload> -->
+                  <span @click="importPatentNo()">导入</span>
+                </p>
               <p v-if="show==2" class="tips" style="color:black"><span @click="toPatentDetails(form.signPatentNo)">查看详情</span></p>
             </el-form-item>
             <el-form-item label="报告名称" prop="name">
@@ -341,6 +343,24 @@ export default {
     this.getDictsFromPAS()
   },
   methods: {
+    //导入专利
+    importPatentNo(){
+      var params = {
+        patentNo:this.form.signPatentNo
+      }
+      this.$api.importByNos(params).then(res => {
+          // console.log(res.code);
+          if (res.code == 200) {
+            if (res.data && res.data.length > 0) {
+            } else {
+              this.load_text = '专利导入中'
+              this.loading = true
+              this.initTask()
+            }
+          }
+        }).catch(error => {
+        })
+    },
     //隐藏popover
     hidePopover(){
       this.matterSign = true
@@ -487,8 +507,9 @@ export default {
     },
     //websocket 后端发送信息
     initTask() {
-      if(this.webSocket){
-      this.webSocket.onmessage = (e) => {
+      var webSocket = new WebSocket(`ws://192.168.1.11:8877/api/v2/ws/328`)
+      if(webSocket){
+        webSocket.onmessage = (e) => {
         // console.log(e)
         const { code, data, message } = JSON.parse(e.data)
         if (code === 903 || code === 904) {

+ 29 - 1
RMS-FrontEnd/src/views/report/components/addPatentList/addPatent.vue

@@ -12,7 +12,35 @@
       <el-container>
         <el-main>
             <div style="display:flex;justify-content: flex-end;padding-bottom:20px">
-                <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button>
+                <!-- <el-button type="primary" size="small" style="margin-right:10px;width:70px" @click="importPatent(reportId)">导入</el-button> -->
+              <!-- <el-dropdown trigger="click" @command="importPatent($event,reportId)" :hide-on-click="false" type="primary" size="small" style="margin-right:10px"></el-dropdown>
+                <el-button type="primary" size="small" >
+                  导入专利<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu slot="dropdown" class="text-align_center">
+                  <el-dropdown-item>
+                      <el-dropdown @command="importPatent($event,reportId)" placement="right-start">
+                        <span class="el-dropdown-link"> 上传专利文件 </span>
+                          <el-dropdown-menu  class="children_item">
+                            <el-dropdown-item command="1">专利号导入</el-dropdown-item>
+                            <el-dropdown-item command="2">Excel导入</el-dropdown-item>
+                            <el-dropdown-item command="3">检索导入</el-dropdown-item>
+                          </el-dropdown-menu>
+                      </el-dropdown>
+                    </el-dropdown-item>
+                    <el-dropdown-item command="5">上传非专利文件</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown> -->
+              <el-dropdown @command="importPatent($event,reportId)" type="primary" size="small" style="margin-right:10px;">
+                <el-button type="primary" size="small" >
+                  导入专利<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu  class="children_item">
+                <el-dropdown-item command="1">专利号导入</el-dropdown-item>
+                <el-dropdown-item command="2">Excel导入</el-dropdown-item>
+                <el-dropdown-item command="3">检索导入</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
                 <div class="btn1" @click="sift" style="width:80px;height:32px;display:flex;justify-content:space-around;border-radius:5px; cursor: pointer;">
                     <img src="../../../../assets/img/filtrationSearch.png" alt="" style="width:16px;height:16px;margin-top:9px;margin-left:8px"><p style="margin:0 8px 0 0;line-height:32px;color:white;font-size:14px">筛选 </p> 
                 </div>

+ 10 - 3
RMS-FrontEnd/src/views/report/components/mixins.js

@@ -287,12 +287,19 @@ export const editContrast = {
 
 export const importPatent ={
   methods:{
-    importPatent(reportId,asCompare){
+    //专利号导入PatentNoImport、excel导入import、检索导入conditionImport
+    importPatent(type,reportId,asCompare){
+      var typeList = {
+        '1':'/PatentNoImport',
+        '2':'/import',
+        '3':'/conditionImport'
+      }
         this.$router.push({
-          path: '/import',
+          path: typeList[type],
           query: {
             id: reportId,
-            asCompare:asCompare
+            asCompare:asCompare,
+            option:8,
           }
         })
     }

+ 11 - 1
RMS-FrontEnd/src/views/report/reportDetails/components/SelectedPatent.vue

@@ -9,7 +9,17 @@
                   <i :class="showRight ? 'el-icon-s-unfold' : 'el-icon-s-fold'" style="font-size: 25px; margin-left: 10px;color: #2f2f2f; cursor: pointer" @click="showRight = !showRight" ></i>
               </el-tooltip>
             </div>
-            <el-button @click="importPatent(reportId,true)" type="primary" size="small" style=" margin-left: 10px;" v-if="$reportPermission(reportId,[0,1])">导入</el-button>
+            <!-- <el-button @click="importPatent(reportId,true)" type="primary" size="small" style=" margin-left: 10px;" v-if="$reportPermission(reportId,[0,1])">导入</el-button> -->
+            <el-dropdown @command="importPatent($event,reportId,1)" type="primary" size="small" style="margin-left:10px;" v-if="$reportPermission(reportId,[0,1])">
+                <el-button type="primary" size="small" >
+                  导入专利<i class="el-icon-arrow-down el-icon--right"></i>
+                </el-button>
+                <el-dropdown-menu  class="children_item">
+                <el-dropdown-item command="1">专利号导入</el-dropdown-item>
+                <el-dropdown-item command="2">Excel导入</el-dropdown-item>
+                <el-dropdown-item command="3">检索导入</el-dropdown-item>
+                </el-dropdown-menu>
+              </el-dropdown>
             <el-button @click="taskFeil" type="primary" size="small" style="margin-left: 10px;" v-if="( reportMessage.status!=3) && $reportPermission(reportId,[0,1])">任务分配</el-button>
             <div style="display: flex;">
               <el-button size="small" type="warning" @click="handleFieldManage" style="margin-right: 10px;">显示栏位管理</el-button>