Explorar o código

Merge branch 'product' of http://1.116.113.26:8088/zhuliu/xiaoshi_system into product

zhuhao hai 1 ano
pai
achega
6e0efa3ed9
Modificáronse 26 ficheiros con 1107 adicións e 760 borrados
  1. 1 24
      src/api/newApi/common.js
  2. 110 78
      src/api/newApi/patent.js
  3. 35 0
      src/api/newApi/report.js
  4. 16 4
      src/assets/css/main.scss
  5. 1 1
      src/store/modules/contextMenu.js
  6. 8 3
      src/utils/common.js
  7. 2 2
      src/views/components/dialog/fields.vue
  8. 6 2
      src/views/components/dialog/menuDialog/contrast.vue
  9. 19 4
      src/views/components/import/conditionImport/searchResult.vue
  10. 1 1
      src/views/layout/mixins/index.js
  11. 7 2
      src/views/product/components/dialog/addEditCategory.vue
  12. 2 2
      src/views/product/components/dialog/addEditProduct.vue
  13. 16 1
      src/views/project/patentDetails/components/notPatentDetails.vue
  14. 26 19
      src/views/project/patentDetails/components/patentDetails.vue
  15. 9 9
      src/views/project/patentDetails/components/patentMessage/PatentRight.vue
  16. 5 2
      src/views/project/patentDetails/components/patentMessage/mixins/index.js
  17. 7 3
      src/views/project/patentDetails/index.vue
  18. 1 1
      src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue
  19. 207 405
      src/views/report/analysisAndOpinion/components/comparisonPlan/comparisonPlan.vue
  20. 249 78
      src/views/report/analysisAndOpinion/components/comparisonResults/components/chooseContrastPlan.vue
  21. 75 64
      src/views/report/analysisAndOpinion/components/comparisonResults/components/contrastRecord.vue
  22. 52 21
      src/views/report/analysisAndOpinion/components/comparisonResults/components/contrastResult.vue
  23. 64 2
      src/views/report/analysisAndOpinion/components/comparisonResults/components/mixins/index.js
  24. 147 12
      src/views/report/analysisAndOpinion/components/comparisonResults/index.vue
  25. 27 18
      src/views/report/components/dialog/addAndEditReport.vue
  26. 14 2
      src/views/report/components/splitPage/splitPage.vue

+ 1 - 24
src/api/newApi/common.js

@@ -224,30 +224,7 @@ export default {
   batchAddCustomField(data) {
     return axios.post("/xiaoshi/customField/batchAddCustomField", data);
   },
-  /**
-  * 专利详情同族专利查询
-  * @param {*} data 
-  * @returns 
-  */
-  selectKinByPatentNo(data) {
-    return axios.post("/xiaoshi/patent/selectKinByPatentNo", data);
-  },
-  /**
-  * 专利详情内部查询权利要求
-  * @param {*} data 
-  * @returns 
-  */
-  queryClaimByPatentNo(params) {
-    return axios.get("/xiaoshi/patent/queryClaimByPatentNo", {params});
-  },
-  /**
-  * 专利详情外部(检索)查询权利要求
-  * @param {*} data 
-  * @returns 
-  */
-  queryExternalClaim(params) {
-    return axios.get("/xiaoshi/patentStar/queryExternalClaim", {params});
-  },
+  
 
 
 };

+ 110 - 78
src/api/newApi/patent.js

@@ -1,82 +1,114 @@
 
 import axios from "@/utils/axios";
 export default {
-     /**
-     * 专利详情
-     */
-     selectPatentDetail(data) {
-        return axios.post("/xiaoshi/patent/selectPatentDetail", data);
-    },
-    /**
-     * 专利数据库查询专利清单(分页)
-     * @param {*} data 
-     * @returns 
-     */
-    QueryPatent(data) {
-        return axios.post("/xiaoshi/patent/queryPatent", data);
-    },
-    /**
-     * 专利数据库查询专利清单(从第几条查多少条)
-     * @param {*} data 
-     * @returns 
-     */
-    getPatentPageMessage(data) {
-        return axios.post("/xiaoshi/patent/getPatentPageMessage", data);
-    },
-    /**
-     * 根据专利号查询专利
-     * @param {*} params 
-     * @returns 
-     */
-    queryPatentByNo(params) {
-        return axios.get("/xiaoshi/patent/queryPatentByNo", {params});
-    },
-    /**
-     * 根据专利号查询专利(外部)
-     * @param {*} params 
-     * @returns 
-     */
-    queryPatentByNoFromWeb(params) {
-        return axios.get("/xiaoshi/patent/queryPatentByNoFromWeb", {params});
-    },
-    /**
-     * 合并发明人、申请人、权利人添加
-     * @param {*} data 
-     * @returns 
-     */
-    mergePerson(data) {
-        return axios.post("/xiaoshi/patent/mergePerson", data);
-    },
-    /**
-     * 合并发明人、申请人、权利人编辑
-     * @param {*} data 
-     * @returns 
-     */
-    updateMergePerson(data) {
-        return axios.post("/xiaoshi/patent/updateMergePerson", data);
-    },
-    /**
-     * 合并发明人、申请人、权利人查询列表
-     * @param {*} data 
-     * @returns 
-     */
-    selectMergePerson(data) {
-        return axios.post("/xiaoshi/patent/selectMergePerson", data);
-    },
-    /**
-     * 获取当前专题库所有的发明人、申请人、权利人
-     * @param {*} data 
-     * @returns 
-     */
-    getMergePerson(data) {
-        return axios.post("/xiaoshi/patent/getMergePerson", data);
-    },
-    /**
-     * 合并发明人、申请人、权利人列表的删除
-     * @param {*} data 
-     * @returns 
-     */
-    delMergePerson(data) {
-        return axios.post("/xiaoshi/patent/delMergePerson", data);
-    },
+  /**
+  * 专利详情
+  */
+  selectPatentDetail(data) {
+    return axios.post("/xiaoshi/patent/selectPatentDetail", data);
+  },
+  /**
+   * 专利数据库查询专利清单(分页)
+   * @param {*} data 
+   * @returns 
+   */
+  QueryPatent(data) {
+    return axios.post("/xiaoshi/patent/queryPatent", data);
+  },
+  /**
+   * 专利数据库查询专利清单(从第几条查多少条)
+   * @param {*} data 
+   * @returns 
+   */
+  getPatentPageMessage(data) {
+    return axios.post("/xiaoshi/patent/getPatentPageMessage", data);
+  },
+  /**
+   * 根据专利号查询专利
+   * @param {*} params 
+   * @returns 
+   */
+  queryPatentByNo(params) {
+    return axios.get("/xiaoshi/patent/queryPatentByNo", { params });
+  },
+  /**
+   * 根据专利号查询专利(外部)
+   * @param {*} params 
+   * @returns 
+   */
+  queryPatentByNoFromWeb(params) {
+    return axios.get("/xiaoshi/patent/queryPatentByNoFromWeb", { params });
+  },
+  /**
+   * 合并发明人、申请人、权利人添加
+   * @param {*} data 
+   * @returns 
+   */
+  mergePerson(data) {
+    return axios.post("/xiaoshi/patent/mergePerson", data);
+  },
+  /**
+   * 合并发明人、申请人、权利人编辑
+   * @param {*} data 
+   * @returns 
+   */
+  updateMergePerson(data) {
+    return axios.post("/xiaoshi/patent/updateMergePerson", data);
+  },
+  /**
+   * 合并发明人、申请人、权利人查询列表
+   * @param {*} data 
+   * @returns 
+   */
+  selectMergePerson(data) {
+    return axios.post("/xiaoshi/patent/selectMergePerson", data);
+  },
+  /**
+   * 获取当前专题库所有的发明人、申请人、权利人
+   * @param {*} data 
+   * @returns 
+   */
+  getMergePerson(data) {
+    return axios.post("/xiaoshi/patent/getMergePerson", data);
+  },
+  /**
+   * 合并发明人、申请人、权利人列表的删除
+   * @param {*} data 
+   * @returns 
+   */
+  delMergePerson(data) {
+    return axios.post("/xiaoshi/patent/delMergePerson", data);
+  },
+  /* 
+  * 专利详情同族专利查询
+   * @param {*} data 
+   * @returns 
+   */
+  selectKinByPatentNo(data) {
+    return axios.post("/xiaoshi/patent/selectKinByPatentNo", data);
+  },
+  /**
+   * 专利详情内部查询权利要求
+   * @param {*} data 
+   * @returns 
+   */
+  queryClaimByPatentNo(params) {
+    return axios.get("/xiaoshi/patent/queryClaimByPatentNo", { params });
+  },
+  /**
+   * 专利详情外部(检索)查询权利要求
+   * @param {*} data 
+   * @returns 
+   */
+  queryExternalClaim(params) {
+    return axios.get("/xiaoshi/patentStar/queryExternalClaim", { params });
+  },
+  /**
+   * 专利详情外部(检索)查询权利要求
+   * @param {*} data 
+   * @returns 
+   */
+  queryExternalDetail(data) {
+    return axios.post("/xiaoshi/patentStar/queryExternalDetail", data);
+  },
 }

+ 35 - 0
src/api/newApi/report.js

@@ -679,4 +679,39 @@ updateSupplyEvidence(data) {
   removeCompareRecord(data) {
     return axios.post("/xiaoshi/stabilityReport/removeCompareRecord", data);
   },
+  /**
+    * 稳定性分析和第三方意见
+    * 查看对比结果
+  */
+  queryAllCompareRecord(data) {
+    return axios.post("/xiaoshi/stabilityReport/queryAllCompareRecord", data);
+  },
+   /**
+    * 稳定性分析和第三方意见
+    * 查看已经对比过的文献信息
+  */
+   getComparedLiteratures(params) {
+    return axios.get("/xiaoshi/stabilityReport/getComparedLiteratures", {params});
+  },
+  /**
+    * 稳定性分析和第三方意见
+    * 添加对比方案
+  */
+  addCompareRecordGroup(data) {
+    return axios.post("/xiaoshi/stabilityReport/addCompareRecordGroup", data);
+  },
+  /**
+    * 稳定性分析和第三方意见
+    * 删除对比方案
+  */
+  removeCompareGroups(data) {
+    return axios.post("/xiaoshi/stabilityReport/removeCompareGroups", data);
+  },
+  /**
+    * 稳定性分析和第三方意见
+    * 查询对比方案
+  */
+  getCompareGroups(data) {
+    return axios.post("/xiaoshi/stabilityReport/getCompareGroups", data);
+  },
 };

+ 16 - 4
src/assets/css/main.scss

@@ -73,11 +73,13 @@
     color: var(--color);
   }
   //表格
-
+.hideIconTable{
+  .el-table__expand-icon{
+    visibility: hidden;
+  }
+}
   .el-table{
-    .el-table__expand-icon{
-      visibility: hidden;
-    }
+    
       
     // border: 1px solid rgba(124,124,124) !important;
     // height: 100%;
@@ -120,6 +122,10 @@
     }
   }
 
+  .el-divider--horizontal{
+    margin:10px !important;
+  }
+  
   //不换行  
   .noWrap{
     overflow: hidden;
@@ -149,10 +155,16 @@
 
 //选中框
 .el-checkbox{
+  width: 100%;
   .el-checkbox__label{
     width: 100%;
   }
 }
+.noWord{
+  .el-checkbox__label{
+    width: 0px;
+  }
+}
 
 
 .disabled{

+ 1 - 1
src/store/modules/contextMenu.js

@@ -20,7 +20,7 @@ export default {
     ], // 右键菜单内容
     defaultMark:{
         markColor:'#ff0000',
-        markType:1,
+        markType:'1',
         permissionType:1,
         rangeType:true,
         content:'',

+ 8 - 3
src/utils/common.js

@@ -365,9 +365,14 @@ export default {
       Message.warning('文件未全部上传,请耐心等待')
       return false
     }
-    form.fileGuids = form.systemFileList.map(item => {
-      return item.guid
-    })
+    if(form.systemFileList && form.systemFileList.length>0){
+      form.fileGuids = form.systemFileList.map(item => {
+        return item.guid
+      })
+    }else{
+      form.fileGuids = []
+    }
+    
   },
   //校验文件是否全部上传
   validFile(data,arr) {

+ 2 - 2
src/views/components/dialog/fields.vue

@@ -41,7 +41,7 @@ export default {
       default: ''
     },
     projectId: {
-      default: null,
+      default: 0,
     },
     taskId: {
       default: null,
@@ -114,7 +114,7 @@ export default {
         projectId: this.projectId,
         taskId: this.taskId,
       }
-      let apiItem = this.projectId ? 'setTableColumns' : 'setCustomField'
+      let apiItem = (this.projectId == 0|| this.projectId) ? 'setTableColumns' : 'setCustomField'
       // sign为true时是统计栏位
       if (this.sign) {
         apiItem = 'setShowCountColumns'

+ 6 - 2
src/views/components/dialog/menuDialog/contrast.vue

@@ -167,6 +167,11 @@ export default {
             if(this.projectId != mark.projectId){
                 this.projectId = mark.projectId
                 this.getFeature()
+            }else{
+                this.features.map(item=>{
+                    item.conclusion = ''
+                    return item
+                })
             }
         }else{
             this.projectId = mark.projectId
@@ -174,7 +179,6 @@ export default {
         }
         if(mark.assoFeatureList){
             this.checkData = mark.assoFeatureList
-            
             this.checkFeatures = mark.assoFeatureList.map(item=>item.featureId)
             if(this.features.length>0){
                 this.checkData.forEach(item=>{
@@ -219,7 +223,7 @@ export default {
         this.btnLoading = true
         this.$api.addCompareRecord(this.form).then(response=>{
             if(response.code == 200){
-                this.changeHighlight(response.data.data)
+                this.changeHighlight(response.data)
                 this.btnLoading = false
                 this.close()
             }

+ 19 - 4
src/views/components/import/conditionImport/searchResult.vue

@@ -28,7 +28,7 @@
       </el-header>
       <el-main id="patent-list-container" v-loading="loading">
         <div class="height_100">
-          <component ref="patentViewList" :is="viewSelected" :column="columnList" :tableData="tableData"
+          <component ref="patentViewList" :is="viewSelected" :column="columnList" :tableData="tableData"  @clickPatentNo="handleClick"
             @select-change="handleSelect" :selected.sync="queryParams.selected" :patentNoList.sync="patentNoList"
             :view-field="patentViewField" @on-sort="handleSort" @addSelect="getChoosePatentNo"></component>
         </div>
@@ -67,7 +67,7 @@
     </el-container>
 
 
-    <field ref="field" type="patentProject" @getFieldList="getFieldList"></field>
+    <field ref="field" type="patentProject" :projectId="0" @getFieldList="getFieldList"></field>
     <!-- <projectListDialog ref="projectListDialog" :importData="searchData"></projectListDialog> -->
     <projectListDialog ref="projectListDialog" :importData="condition"></projectListDialog>
 
@@ -164,7 +164,7 @@ export default {
   },
   created() { },
   async mounted() {
-    this.columnList = await this.$commonJS.getCustomField('patent',{ projectId: 0, taskId: 0 })
+    this.columnList = await this.$commonJS.getCustomField('patent',{ projectId: 0, taskId: null })
     if (this.$s.getSession('queryParams') && this.$s.getSession('queryParams').params.retrieveRecordId) {
       this.queryParams.retrieveRecordId = this.$s.getSession('queryParams').params.retrieveRecordId
     }
@@ -173,6 +173,21 @@ export default {
 
   },
   methods: {
+    handleClick(row, location) {
+      var search = {
+        searchOption: this.searchOption,
+        location: location,
+      }
+      this.$s.setSession('search', search)
+      this.$router.push(
+        {
+          path: '/patentDetails/' + row.patentNo,
+          query: {
+            outside:true
+          }
+        }
+      )
+    },
     //子组件返回检索式 
     async search(val) {
       if (val.searchStr == '') {
@@ -333,7 +348,7 @@ export default {
     },
     //获取自定义栏位
     getFieldList(data) {
-      this.fieldList = data
+      this.columnList = data
     },
     //快速选择
     handleSelectNumber(type) {

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

@@ -4,7 +4,7 @@ import Store from '@/store'
 export const webSocket = {
   methods: {
     connectWebSocket(userId) {
-      let webSocket = new WebSocket(`ws://${this.$c.staticURL}:8877/api/xiaoshi/ws/` + userId)
+      let webSocket = new WebSocket(`ws://${this.$c.staticURL}:8879/api/xiaoshi/ws/` + userId)
       // let webSocket = new WebSocket(`ws://192.168.1.18:8877/api/xiaoshi/ws/` + userId)
       Store.commit('SET_WEB_SOCKET', webSocket)
       webSocket.onopen = () => {

+ 7 - 2
src/views/product/components/dialog/addEditCategory.vue

@@ -21,7 +21,10 @@
         <el-form-item label="谁可以看" prop="rate">
             <div  v-for="item in $constants.showType" :key="item.value" >
               <div>
-                <el-radio :checked="item.value == form.showType" :label="item.value" v-model="form.showType" @input="changeShowType(item.value)">{{item.label}}</el-radio>
+                <el-radio-group :value="form.showType" @input="changeShowType">
+                  <el-radio :label="item.value">{{item.label}}</el-radio>
+                </el-radio-group>
+                <!-- <el-radio :checked="item.value == form.showType" :label="item.value" :value="form.showType" @input="changeShowType(item.value)">{{item.label}}</el-radio> -->
               </div>
               <div v-if="form.showType && item.value == form.showType && [0,1].indexOf(item.value)==-1" class="person" @click="showDialog(1)">
                 <p>选择朋友</p>
@@ -104,7 +107,8 @@ export default {
     open(row) {
       this.form = JSON.parse(JSON.stringify(row))
       if(!this.form.showType && this.form.showType!=0){
-        this.form.showType=0
+        this.$set(this.form,'showType',0)
+        // this.form.showType = 0
       }
       if (row.id) {
         this.title = '编辑产品类别'
@@ -191,6 +195,7 @@ export default {
         return false
       }
       if(personIds.length>0){
+        this.$set(this.form,'showType',this.form.showType)
         this.$set(this.form,'persons',persons)
         this.$set(this.form,'showPersonIds',personIds)
       }else{

+ 2 - 2
src/views/product/components/dialog/addEditProduct.vue

@@ -52,7 +52,7 @@
         <el-form-item label="谁可以看" prop="rate">
             <div  v-for="item in $constants.showType" :key="item.value" >
               <div>
-                <el-radio :checked="item.value == form.showType" :label="item.value" v-model="form.showType" @input="changeShowType(item.value)">{{item.label}}</el-radio>
+                <el-radio :checked="item.value == form.showType" :label="item.value" :value="form.showType" @input="changeShowType(item.value)">{{item.label}}</el-radio>
               </div>
               <div v-if="form.showType && item.value == form.showType && [0,1].indexOf(item.value)==-1" class="person" @click="showDialog(1)">
                 <p>选择朋友</p>
@@ -166,7 +166,7 @@ export default {
     async open(row) {
       this.form = JSON.parse(JSON.stringify(row))
       if(!this.form.showType && this.form.showType!=0){
-        this.form.showType=0
+        this.$set(this.form,'showType',0)
       }
       if (this.form.id) {
         this.title = '编辑产品'

+ 16 - 1
src/views/project/patentDetails/components/notPatentDetails.vue

@@ -13,6 +13,11 @@
                     {{ evidence.name }}
                 </span>
             </div>
+            <div>
+                <div v-if="reportType == 1 || reportType == 2">
+                    <el-button type="primary" size="small" @click="addContrast">添加对比记录</el-button>
+                </div>
+            </div>
           </div>
         </div>
       </el-header>
@@ -22,17 +27,24 @@
         </div>
       </el-main>
     </el-container>
+    <contrast ref="contrast"></contrast>
   </div>
 </template>
 
 <script>
+import contrast from '@/views/components/dialog/menuDialog/contrast.vue'
 export default {
-  components: {},
+  components: {
+    contrast
+  },
   props: {
     evidence:{
         default:()=>{
             return {}
         }
+    },
+    reportType:{
+        
     }
   },
   data() {
@@ -77,6 +89,9 @@ export default {
                 that.loading = false
             }
         })
+    },
+    addContrast(){
+        this.$refs.contrast.open()
     }
   },
 };

+ 26 - 19
src/views/project/patentDetails/components/patentDetails.vue

@@ -37,8 +37,6 @@
                 </el-button>
                 <el-dropdown-menu slot="dropdown" style="margin-top:0px">
                   <!-- 遍历按钮 -->
-                  <el-dropdown-item @click.native="handleAnalyse(0)"
-                    v-if="$permission('/workspace/createReport/invalid')">无效分析</el-dropdown-item>
                   <el-dropdown-item @click.native="handleAnalyse(1)"
                     v-if="$permission('/workspace/createReport/invalid')">第三方意见</el-dropdown-item>
                   <el-dropdown-item @click.native="handleAnalyse(2)"
@@ -47,8 +45,7 @@
                     v-if="$permission('/workspace/createReport/tort')">侵权分析</el-dropdown-item>
                   <el-dropdown-item @click.native="handleAnalyse(5)"
                     v-if="$permission('/workspace/createReport/avoidDesign')">回避设计</el-dropdown-item>
-                  <el-dropdown-item @click.native="handleAnalyse(7)"
-                    v-if="$permission('/workspace/createReport/reInvalid')">无效应对</el-dropdown-item>
+                  <el-dropdown-item @click.native="handleAnalyse(7)">官方无效</el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
               <el-button type="primary" size="small" @click="handleSelect('PatentExport')">导出文档</el-button>
@@ -85,11 +82,11 @@
               :showView="radio != 1 && activeMenu != activeMenu2">
               <div slot="left">
                 <component :activeName="activeMenu" style="width:100%;padding-right: 10px;" :is="activeMenu" :evidence="evidence" :signPatentNo="signPatentNo" :reportType="reportType"
-                  :project-id="projectId" :patent="patent" :patentNo="[patent.patentNo]" :domId="patent.patentNo + '1'"
+                  :project-id="projectId" :outside="outside" :patent="patent" :patentNo="[patent.patentNo]" :domId="patent.patentNo + '1'"
                   @refresh="getPatent()"></component>
               </div>
               <div slot="right">
-                <component :is="activeMenu2" :project-id="projectId" :patent="patent" :signPatentNo="signPatentNo" :reportType="reportType" :sign="true" :evidence="evidence"></component>
+                <component :is="activeMenu2" :project-id="projectId" :outside="outside" :patent="patent" :signPatentNo="signPatentNo" :reportType="reportType" :sign="true" :evidence="evidence"></component>
               </div>
             </my-view>
           </div>
@@ -115,6 +112,8 @@
         </div>
       </el-main>
     </el-container>
+    <!-- 创建报告 -->
+    <addAndEditReport ref="addAndEditReport"></addAndEditReport>
   </div>
 </template>
 
@@ -129,7 +128,7 @@ import PatentPDF from './patentMessage/PatentPDF.vue'
 import { projectData, handleData } from '../../patentCollection/components/mixins/index'
 
 import PatentField from './PatentField.vue'
-
+import addAndEditReport from '@/views/report/components/dialog/addAndEditReport.vue'
 export default {
   components: {
     PatentBasic,
@@ -140,6 +139,7 @@ export default {
     PatentStatus,
     PatentPDF,
     PatentField,
+    addAndEditReport
   },
   mixins: [projectData, handleData],
   props: {
@@ -160,6 +160,9 @@ export default {
     },
     reportType:{
 
+    },
+    outside:{
+      default:false
     }
   },
   data() {
@@ -294,7 +297,11 @@ export default {
       var params = {
         patentNo: this.patentNo
       }
-      this.$api.selectPatentDetail(params).then(response => {
+      var api = 'selectPatentDetail'
+      if(this.outside){
+        api = 'queryExternalDetail'
+      }
+      this.$api[api](params).then(response => {
         if (response.code == 200) {
           this.patent = response.data
         }
@@ -302,19 +309,19 @@ export default {
     },
     // 创建报告:无效分析等点击事件
     handleAnalyse(id) {
-      this.$api.getProject({ id: this.projectId }).then(response => {
-        var form = {
-          type: id,
-          signPatentNo: this.pNo,
+      var form = {
+          reportType: id,
+          signPatentNo: this.patent.patentNo,
           projectId: this.projectId,
-          departmentId: response.data[0].departmentId,
-          personId: response.data[0].personnelId,
-          clientId: response.data[0].clientId,
-          proTec: response.data[0].technicalTheme,
-          scenarioList: response.data[0].scenarioList
+          // departmentId: response.data[0].departmentId,
+          // personId: response.data[0].personnelId,
+          // clientId: response.data[0].clientId,
+          matterId: [],
+          scenarioId: [],
+          inventionName:this.getView(this.patent, 'title')
         }
-        this.$refs.ReportForm.open(form)
-      })
+        this.$refs.addAndEditReport.open(form)
+
     },
     handleSelect(index) {
       if (index === 'PatentExport') {

+ 9 - 9
src/views/project/patentDetails/components/patentMessage/PatentRight.vue

@@ -335,21 +335,21 @@ export default {
         return true;
     },
     initData() {
-      if (this.patent.rights) {
-        this.records.original = this.patent.rights.map((item) => item.content);
-        this.records.translation = this.patent.rights.map(
-          (item) => item.contentOut
-        );
+      if (this.patent.claims) {
+        // this.records.original = this.patent.rights.map((item) => item.content);
+        // this.records.translation = this.patent.rights.map(
+        //   (item) => item.contentOut
+        // );
       } else {
-        if (!this.projectId) {
+        if (this.outside) {
           var params = {
             patentCell: 1,
-            patentNo: this.patent.publicNo,
+            patentNo: this.patent.patentNo,
             appNo: this.patent.applicationNo,
           };
-          this.$api.getPatentPart(params).then((response) => {
+          this.$api.queryExternalClaim(params).then((response) => {
             if (response.code == 200) {
-              this.$set(this.patent, "rights", response.data.rights);
+              this.$set(this.patent, "claims", response.data.claims);
             }
           });
         }

+ 5 - 2
src/views/project/patentDetails/components/patentMessage/mixins/index.js

@@ -10,7 +10,10 @@ export const patentDetails={
         },
         evidence:{},
         signPatentNo:{},
-        reportType:{}
+        reportType:{},
+        outside:{
+            default:false
+        }
     },
     data() {
         return {
@@ -61,7 +64,7 @@ export const patentDetails={
             a.position = currentSelectObj.index//选中文本开始位置
             a.id = null//对比记录Id
             a.remark=null//备注
-            a.markType = 1//高亮类型
+            a.markType = '1'//高亮类型
             a.markColor = ''//高亮类型
             // a.color = this.currentSelectObj.color
             a.createFrom =this.projectId? 1:0//来源

+ 7 - 3
src/views/project/patentDetails/index.vue

@@ -8,12 +8,12 @@
         <div slot="left" style="width:100%">
           <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :signPatentNo="signPatentNo" :reportType="reportType" :evidence="evidenceData"></notPatentDetails>
           <!-- <Patent-Details :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></Patent-Details> -->
-          <component v-else :is='components' :patentNo="patentNo" :evidence="evidenceData" :signPatentNo="signPatentNo"  :projectId="projectId" :taskId="taskId"
+          <component v-else :is='components' :patentNo="patentNo" :evidence="evidenceData" :outside="outside" :signPatentNo="signPatentNo"  :projectId="projectId" :taskId="taskId"
             :reportType="reportType" :isResult="isResult"></component>
         </div>
         <div slot="right" style="width:100%">
           <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :signPatentNo="signPatentNo" :reportType="reportType" :evidence="evidenceData"></notPatentDetails>
-          <Patent-Details v-else :patentNo="patentNo" :evidence="evidenceData" :signPatentNo="signPatentNo" :reportType="reportType" :projectId="projectId" :taskId="taskId"></Patent-Details>
+          <Patent-Details v-else :patentNo="patentNo" :outside="outside" :evidence="evidenceData" :signPatentNo="signPatentNo" :reportType="reportType" :projectId="projectId" :taskId="taskId"></Patent-Details>
         </div>
       </my-View>
     </div>
@@ -80,6 +80,9 @@ export default {
     },
     signPatentNo(){
       return this.$route.query.signPatentNo
+    },
+    outside(){
+      return this.$route.query.outside
     }
   },
   created() { },
@@ -196,7 +199,8 @@ export default {
             handlerType:this.handlerType,
             evidenceType: evidenceType,
             evidence: evidence,
-            signPatentNo:this.signPatentNo
+            signPatentNo:this.signPatentNo,
+            outside:this.outside
           }
         }
       )

+ 1 - 1
src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue

@@ -17,7 +17,7 @@
             </div>
         </el-header>
         <el-main v-DivHeight="getDivHeight">
-            <el-table v-if="refreshData" ref="table" :data="tableData" border v-loading="loading" :header-cell-style="{'text-align':'center'}" :maxHeight="tableHeight - 50" row-key="keyId" :expand-row-keys="expends" :span-method="objectSpanMethod">
+            <el-table v-if="refreshData" ref="table" class="hideIconTable" :data="tableData" border v-loading="loading" :header-cell-style="{'text-align':'center'}" :maxHeight="tableHeight - 50" row-key="keyId" :expand-row-keys="expends" :span-method="objectSpanMethod">
                 <el-table-column type="expand" width="1">
                     <template slot-scope="scope">
                         <div>

+ 207 - 405
src/views/report/analysisAndOpinion/components/comparisonPlan/comparisonPlan.vue

@@ -2,77 +2,92 @@
     <div class="height_100 plan">
         <el-container>
             <el-header>
-                <div style="display:flex; justify-content:flex-end;align-items: center;height: 50px;">
-                    <el-button type="danger" @click="delPlan(0)" v-if="checkList.length>0 && $reportPermission(reportId,[0,1])">删除</el-button>
+                <div style="width:100%;display:flex; justify-content:flex-end;align-items: center;height: 50px;">
+                    <el-button type="danger" size="small" @click="delPlan(0)" v-if="checkList.length>0 && $reportPermission(projectId,[0,1])">删除</el-button>
                 </div>
             </el-header>
-            <el-main>
+            <el-main v-DivHeight="getDivHeight">
                 <el-table
-                    v-if="show"
                     :data="tableData"
                     border
                     class="table"
-                    height="750"
+                    :maxHeight="tableHeight - 45"
                     :span-method="objectSpanMethod"
                     :row-class-name="tableRowClassName"
                     v-loading="loading"
+                    :header-cell-style="{'text-align':'center'}"
                     style="min-width: 100%; overflow:auto">
-                    <el-table-column prop="right" label="权要"  align="center"  width="200px" :filters="rightList" :filter-method="filterHandler">
+                    <el-table-column prop="rightSort" label="权要"  align="center"  width="200px">
                         <template slot-scope="scope">  
-                            <span>{{scope.row.right}}</span>
+                            <span>{{scope.row.rightName}}</span>
                         </template>
                     </el-table-column>
-                    <el-table-column prop="resultant" label="对比组合" align="center" width="300px" >
+                    <el-table-column prop="groupId" label="对比组合"  min-width="200px" >
 
-                    <template slot-scope="scope" >
-                        <div >
-                            <el-checkbox-group v-model="checkList">
-                                <el-checkbox :label="scope.row.PlanId" >
-                                    <p ><span>{{ scope.row.resultant}} </span><span v-if="$reportPermission(reportId,[0,1])"><el-link style="color:red;margin-left:10px" @click.prevent="delPlan(scope.row.PlanId)">删除</el-link></span></p>
-                                </el-checkbox>
-                            </el-checkbox-group>
-                        </div>
-                    
-                    </template>
+                        <template slot-scope="scope" >
+                            <div >
+                                <el-checkbox-group v-model="checkList">
+                                    <el-checkbox :label="scope.row.groupId" >
+                                        <p ><span>{{ scope.row.groupName}} </span><span v-if="$reportPermission(projectId,[0,1])"><el-link style="color:red;margin-left:10px" @click.prevent="delPlan(scope.row.groupId)">删除</el-link></span></p>
+                                    </el-checkbox>
+                                </el-checkbox-group>
+                            </div>
+                        </template>
                     </el-table-column>
-                    <el-table-column prop="assoRecordsFeatures" label="特征"  align="center"  width="200px">
-                    <template slot-scope="scope">
-                        <div class="innerTable"  style="width:calc(100% + 20px);margin-left:-10px">
-                            <el-tooltip class="item" effect="dark" :content="scope.row.features.content" placement="top">
-                                <span>特征{{scope.row.features.featuresOrder}}</span>
-                            </el-tooltip>  
-                        </div>
-                    </template>
+                    <el-table-column prop="featureSysOrder" label="特征"  align="center"  width="200px">
+                        <template slot-scope="scope">
+                            <div class="innerTable"  style="width:calc(100% + 20px);margin-left:-10px">
+                                <el-tooltip class="item" effect="dark" :content="scope.row.featureContent" placement="top">
+                                    <span>特征{{scope.row.featureSysOrder}}</span>
+                                </el-tooltip>  
+                            </div>
+                        </template>
                     </el-table-column>
                     <el-table-column prop="PublicKnowledge" label="公识"  align="center"  width="100px">
                     <template slot-scope="scope">  
                         <div class="innerTable"  style="width:calc(100% + 20px);margin-left:-10px">
-                                <span  v-if="scope.row.compareRecords"></span>
-                                <span v-else>公识 </span>
+                                <span>
+                                    {{ scope.row.publicKnowledge }}
+                                </span>
                         </div>
                     </template>
                     </el-table-column>
-                    <el-table-column prop="patentNo" label="对比专利"  align="center"  width="200px">
+                    <el-table-column prop="patentNo" label="对比专利"  width="200px">
                     <template slot-scope="scope">  
-                        <div class="innerTable" style="width:calc(100% + 20px);margin-left:-10px">
-                                <span  v-if="scope.row.compareRecords"> {{scope.row.compareRecords.patentNo}}</span>
-                                <span v-else ></span>
+                        <div>
+                            {{ scope.row.literatureName }}
                         </div>
                     </template>
                     </el-table-column>
-                    <el-table-column prop="content" label="对比内容"  align="center" min-width="200px">
+                    <el-table-column prop="content" label="对比内容"  min-width="200px">
                     <template slot-scope="scope">  
-                        <div class="innerTable" style="width:calc(100% + 20px);margin-left:-10px">
-                            <span  v-if="scope.row.compareRecords">
-                                {{scope.row.compareRecords.content}}<img v-if="scope.row.compareRecords.filePath" :src="$p + scope.row.compareRecords.filePath" width="100px" @click="showImage(scope.row.compareRecords.filePath)" />
+                        <div>
+                            <span v-if="scope.row.fieldName">
+                                【{{scope.row.fieldName}}】
+                            </span>
+                            <span v-if="scope.row.recordCommon">
+                                ({{ scope.row.recordCommon }})
+                            </span>
+                            <span>
+                                {{ scope.row.evidenceText }}
+                            </span>
+                            <span v-if="scope.row.fileGuid">
+                                <el-image
+                                    ref="image"
+                                    :preview-src-list="[$commonJS.checkViewer(scope.row.fileGuid)]"
+                                    :src="$commonJS.checkViewer(scope.row.fileGuid)"
+                                    style="vertical-align: middle; width: 100px"
+                                ></el-image>
+                            </span>
+                            <span v-if="scope.row.conclusion">
+                                ({{ scope.row.conclusion }})
                             </span>
-                            <span v-else></span>
                         </div>
                     </template>
                     </el-table-column>
-                    <el-table-column prop="contrastResult" label="对比结论/理由"  align="center"  width="300px">
+                    <el-table-column prop="groupId" label="对比结论/理由"  align="center"  width="300px">
                         <template slot-scope="scope">  
-                            <span v-html="scope.row.contrastResult"></span>
+                            <span v-html="scope.row.common"></span>
                         </template>
                     </el-table-column>
                 </el-table>
@@ -82,297 +97,152 @@
 </template>
 
 <script>
-import { downLoad2 } from "@/utils";
+import { getTableHeight } from '@/views/components/mixins'
 export default {
-    props:['reportId','row'],
+    mixins:[getTableHeight],
+    props:{
+        projectId:{
+            default:0
+        }
+    },
     components:{
     },
     data() {
         return {
-          btnLoading:false,
-          loadingTemplate: false,
-          reportType:this.row.type,
-          reportTemplateId:'',
-          show:true,
-          showList:true,
-          checkList2:[],
-          imageUrl:'',
-          showFile :false,
-          checkList:[],
-          rightList:[],
-          resultant:[],
-          tableData1:[],
             tableData:[],
+            mergeArr:['rightSort','groupId','featureSysOrder'],
+            mergeObj:{},
             loading:false,
-            mergeObj: {},
-            mergeArr: [ 'right',"resultant",'contrastResult','patentNo','content'],
+            checkList:[],
+            rightList:[],
+            resultant:[]
         }
     },
     mounted() {
         this.getContrastPlan()
     },
     watch:{
-      checkList2(val){
-        if(val.length>0){
-          this.showList = false
-        }else{
-          this.showList = true
-        }
-      },
-      reportId(val){
 
-      }
     },
     methods: {
-      //导出报告
-      exportReport(row){
-        this.reportTemplate = true
-      },
-      getReportTemplateId(val){
-        this.reportTemplateId = val
-      },
-      close1(){
-        this.reportTemplateId = ''
-        this.reportTemplate = false
-      },
-      submitExport(){
-      if (this.reportTemplateId) {
-        this.loadingTemplate=true
-        var a = {
-          reportId : this.reportId,
-          templeId :this.reportTemplateId
-        }
-        this.$api.exportReport(a).then(response => {
-          if (response.code == 200) {
-            this.$message.success('导出成功')
-            downLoad2(response.data)
-            this.reportTemplateId = ''
-            this.reportTemplate = false
-            this.loadingTemplate=false
-          } else{
-            this.$message.error('导出失败,请重试')
-            this.loadingTemplate=false
-          }
-        }).catch(error => {
-          this.$message.error('导出失败,请重试')
-            this.loadingTemplate=false
-        })
-      }else{
-        this.$alert('请选择报告模板', '提示', {
-          confirmButtonText: '确定',
-          callback: action => {
-            
-          }
-        });
-      }
-      
-    },
-      getInfo(val){
-       //console.log(this.checkList2)
-        var a = this.checkList2.findIndex(item=>{
-          //console.log(item,val)
-          return item == val
-        })
-        //console.log(a)
-        if(a==-1){
-          //console.log(1)
-          this.checkList2.push(val)
-        }else{
-          this.checkList2.splice(a,1)
-        }
-        this.$forceUpdate()
-        //console.log(val,this.checkList2)
-      },
-      checkPatentList(){
-        var a = this.checkList2.map(item=>{
-          return item.value
-        })
-        this.tableData = []
-       this.tableData = this.tableData1.filter(item=>{
-          return a.includes(item.resultant)
-        })
-        this.getSpanArr(this.tableData)
-        // this.checkList2 = []
-        // this.$refs.tree.setCheckedNodes([])
-        this.show = false
-        this.$nextTick(()=>{
-          this.show = true
-        })
-        // //console.log(this.tableData)
-      },
-      getChecked(){
-        this.$refs.tree.setCheckedNodes(this.checkList2)
-      },
-      reset(){
-        this.checkList2 = []
-        this.$refs.tree.setCheckedNodes([])
-        this.tableData = []
-        this.tableData = JSON.parse(JSON.stringify(this.tableData1))
-        this.getSpanArr(this.tableData)
-        //console.log(this.checkList2)
-        this.show = false
-        this.$nextTick(()=>{
-          this.show = true
-        })
-      },
-      getPatentList(){},
-       //查看图片
-    showImage(url){
-      this.imageUrl =this.$p + url
-      this.showFile = true
-    },
-    filterHandler(value, row, column) {
-        const property = column['property'];
-        return row[property] === value;
-      },
-      // 表格隔行变色
-      tableRowClassName({ row, rowIndex }) {
-        // if (rowIndex % 2 === 0) {
-        //   return 'success-row1'
-        // } else  {
-        //   return ''
-        // }
-      },
-      delPlan(id) {
-        if(id){
-          a = [id]
-        } else {
-          var a = this.checkList
-        }
         
-        //console.log(this.checkList)
-        this.$confirm('此操作将永久删除, 是否继续?', '提示', {
-          confirmButtonText: '确定',
-          cancelButtonText: '取消',
-          type: 'warning'
-        }).then(() => {
-          this.$api.deleteCompareScenarios(a).then(response=>{
-            if(response.code == 200){
-              this.$message({
-                type: 'success',
-                message: '删除成功!'
-              });
-              this.rightList = []
-              this.resultant = []
-              this.getContrastPlan()
-              this.checkList = []
+        filterHandler(value, row, column) {
+            const property = column['property'];
+            return row[property] === value;
+        },
+        // 表格隔行变色
+        tableRowClassName({ row, rowIndex }) {
+            // if (rowIndex % 2 === 0) {
+            //   return 'success-row1'
+            // } else  {
+            //   return ''
+            // }
+        },
+        delPlan(id) {
+            if(id){
+                a = [id]
+            } else {
+                var a = this.checkList
             }
+            this.$confirm('此操作将永久删除, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$api.removeCompareGroups(a).then(response=>{
+                    if(response.code == 200){
+                        this.$message({
+                            type: 'success',
+                            message: '删除成功!'
+                        });
+                        this.rightList = []
+                        this.resultant = []
+                        this.getContrastPlan()
+                        this.checkList = []
+                    }
+                    
+                })
             
-          })
-          
-        }).catch(() => {        
-        });
-        
-      },
+            }).catch(() => {        
+            });
+            
+        },
         getContrastPlan(){
-            this.$api.selectCompareScenarios({reportID:this.reportId}).then(response=>{
+            var params = {
+                projectId:this.projectId
+            }
+            this.loading = true
+            this.$api.getCompareGroups(params).then(response=>{
                 if(response.code == 200){
-                  var data = []
-                  
-                 
-                    //console.log(response.data)
-                    response.data.forEach((item,index)=>{
-                      var a = this.rightList.findIndex(i=>{
-                        return i.value == item.right
-                      })
-                      if(a==-1){
-                        this.rightList.push({
-                          text:item.right,
-                          value:item.right
-                        })
-                      }
-                      this.resultant.push({
-                          text:'对比组合'+(index+1),
-                          patentNoList:[],
-                          value:'对比组合'+(index+1)
-                      })
-                      var i = 0
-                      item.patentNoIndex=[]
-                      item.assoRecordsFeatures.forEach((item1)=>{
-                        if(item1.compareRecords.patentNo){
-                          
-                          var b = this.resultant[index].patentNoList.findIndex(i=>{
-                            return i == item1.compareRecords.patentNo
-                          })
-                          if(b == -1){
-                            this.resultant[index].patentNoList.push(item1.compareRecords.patentNo)
-                          }
-                          
-                        }
-                        var c = item.featuresList.findIndex(i=>{
-                          return i.id == item1.features.id
-                        })
-                        if(c!=-1){
-                          item1.compareRecords = null
+                    // this.tableData = response.data.data
+                    var data = []
+                    var groupOrder = 0
+                    response.data.data.forEach(item=>{
+                        groupOrder += 1
+                        var obj = {
+                            groupName:`对比组合${groupOrder}`,
+                            groupId:item.groupId,
+                            common:item.common,
+                            rightSort:item.rightSort,
+                            rightName:item.rightName,
+                            rightContent:item.rightContent
                         }
-                        
-                      })
-                      item.assoRecordsFeatures.forEach((item1,ele)=>{
-                        
-                           if(ele == 0){
-                            item.patentNoIndex.push(ele)
-                          }else{
-                            if(item1.compareRecords&&item.assoRecordsFeatures[ele-1].compareRecords){
-                              if(item1.compareRecords.patentNo == item.assoRecordsFeatures[ele-1].compareRecords.patentNo && item1.compareRecords.content == item.assoRecordsFeatures[ele-1].compareRecords.content){
-                             
-                              item.patentNoIndex[item.patentNoIndex.length-1]+=1
-                            }else{
-                              item.patentNoIndex.push(ele)
+                        var feature = item.featureMessages
+                        if(feature.length>0){
+                            for(let i = 0;i<feature.length;i++){
+                                var obj2 = {
+                                    featureSysOrder : feature[i].sysOrder,
+                                    featureName: feature[i].featureName,
+                                    featureContent : feature[i].content
+                                }
+                                var evidenceReasons = feature[i].evidenceReasons
+                                if(evidenceReasons && evidenceReasons.length>0){
+                                    for(let j= 0;j<evidenceReasons.length;j++){
+                                        if(evidenceReasons[j].evidenceId == 0){
+                                            data.push(
+                                                {
+                                                    ...obj,
+                                                    ...obj2,
+                                                    publicKnowledge:'公知'
+                                                }
+                                            )
+                                        }else{
+                                            evidenceReasons[j].recordCommon = evidenceReasons[j].common
+                                            delete evidenceReasons[j].common;
+                                            data.push(
+                                                {
+                                                    ...obj,
+                                                    ...obj2,
+                                                    ...evidenceReasons[j]
+                                                }
+                                            )
+                                        }
+                                    }
+                                }else{
+                                    data.push(
+                                        {
+                                            ...obj,
+                                            ...obj2,
+                                        }
+                                    )
+                                }
                             }
-                            }else{
-                              item.patentNoIndex.push(ele)
-                            }
-                            
-                          }
-                          
-                          
-                        //   item1.rightList = item
-                        // data.push(item1)
-                        
-                        
-                      })
-                     
-                      item.resultant = '对比组合'+(index+1)
-                      // item.featuresList.forEach(i=>{
-                      //   item.assoRecordsFeatures.push({
-                      //     featureId:i.id,
-                      //     features:i
-                      //   })
-                      // })
-                      item.assoRecordsFeatures.sort((a,b)=>{
-                        return a.featureId - b.featureId
-                      })
-                    })
+                        }else{
+                            data.push(
+                                {
+                                    ...obj
+                                }
+                            )
+                        }
 
-                    this.tableData = []
-                    response.data.forEach(item=>{
-                      item.assoRecordsFeatures.forEach((item1,index)=>{
-                        item1.contrastResult= item.contrastResult
-                        item1.featuresIDList= item.featuresIDList
-                        item1.featuresList= item.featuresList
-                        item1.PlanId= item.id
-                        item1.reportId= item.reportId
-                        item1.right= item.right
-                        item1.rightId= item.rightId
-                        item1.signPatentNo= item.signPatentNo
-                        item1.resultant = item.resultant
-                        this.tableData.push(item1)
-                      })
                     })
-                  this.tableData.sort((a,b)=>{
-                    return a.right.slice(2,a.right.length) - b.right.slice(2,b.right.length)
-                  })
-                    // console.log(data)
-                    
-                    // // response.data = data
-                    // this.tableData = data
-                    
-                  //  debugger
-                   this.getSpanArr(this.tableData)
-                    // this.tableData = data
-                    this.tableData1 = JSON.parse(JSON.stringify(this.tableData))
-                    
+                    this.tableData = data
+                    this.getSpanArr(this.tableData)
+                    this.loading = false
                 }
+            }).catch(error=>{
+                this.tableData = []
+                this.loading = false
             })
         },
         getSpanArr(data) {
@@ -380,113 +250,45 @@ export default {
                 let count = 0;
                 this.mergeObj[key] = [];
                 data.forEach((item, index) => {
-                  // item.assoRecordsFeatures.forEach(i=>{
-                  //   if(i.compareRecords){
-                  //     this.mergeObj[key].push(0)
-                  //   }else{
-                  //     this.mergeObj[key].push(2)
-                  //   }
-                  // })
-                    if(key == 'right' || key == 'resultant'){
-                      if (index === 0) {
-                          this.mergeObj[key].push(1);
-                      }else{
-                        if (item[key] === data[index - 1][key]) {
-                          this.mergeObj[key][count] += 1;
-                          this.mergeObj[key].push(0);
-                        }else{
-                            count = index;
+                    if(key == 'featureSysOrder'){
+                        if (index === 0) {
                             this.mergeObj[key].push(1);
-                          }
-                      }
-                    }else if(key == 'patentNo' || key=='content'){
-                      if (index === 0) {
-                          this.mergeObj[key].push(1);
-                      }else{
-                        if(item.compareRecords&&data[index - 1].compareRecords){
-                          if (item.compareRecords[key] === data[index - 1].compareRecords[key] && item.PlanId == data[index-1].PlanId) {
-                            this.mergeObj[key][count] += 1;
-                            this.mergeObj[key].push(0);
-                          }else{
-                              count = index;
-                              this.mergeObj[key].push(1);
+                        } else {
+                            if (item[key] === data[index - 1][key] && item[key].groupId === data[index - 1].groupId) {
+                                this.mergeObj[key][count] += 1;
+                                this.mergeObj[key].push(0);
+                            } else {
+                                count = index;
+                                this.mergeObj[key].push(1);
                             }
-                        }else{
-                          count = index;
-                              this.mergeObj[key].push(1);
                         }
-                        
-                      }
                     }
-                    // else{
-                      
-                    //   item.assoRecordsFeatures.forEach((i,index2)=>{
-                    //     if(index == 0){
-                    //        if(i.compareRecords){
-                    //         if(index2 == 0){
-                    //           this.mergeObj[key].push(1);
-                    //         }else{
-                    //           if(i[key] === item.assoRecordsFeatures[index2-1][key]){
-                    //             this.mergeObj[key][count] += 1;
-                    //             this.mergeObj[key].push(0);
-                    //           }else{
-                    //             count = index2;
-                    //             this.mergeObj[key].push(1);
-                    //           }
-                    //         }
-                    //         // else{
-                    //         //   count = index;
-                    //         //   this.mergeObj[key].push(1);
-                    //         // }
-                    //       }
-                    //     }else{
-                    //       if(item.resultant === data[index - 1].resultant){
-                    //         if(i.compareRecords){
-                    //           if(index2 == 0){
-                    //             this.mergeObj[key].push(1);
-                    //           }else{
-                    //             if(i[key] === item.assoRecordsFeatures[index2-1][key]){
-                    //               this.mergeObj[key][count] += 1;
-                    //               this.mergeObj[key].push(0);
-                    //             }else{
-                    //               count = index2;
-                    //               this.mergeObj[key].push(1);
-                    //             }
-                    //           }
-                    //           // else{
-                    //           //   count = index;
-                    //           //   this.mergeObj[key].push(1);
-                    //           // }
-                    //         }
-                    //       }
-                    //     }
-                         
-                    //     })
-
-                    // }
-
-
-              
+                    else{
+                        if (index === 0) {
+                            this.mergeObj[key].push(1);
+                        } else {
+                            if (item[key] === data[index - 1][key]) {
+                                this.mergeObj[key][count] += 1;
+                                this.mergeObj[key].push(0);
+                            } else {
+                                count = index;
+                                this.mergeObj[key].push(1);
+                            }
+                        }
+                    }
+                    })
                 })
-            })
-            this.mergeObj.contrastResult = this.mergeObj.resultant
-            // data.forEach((item,index)=>{
-            //   if (index === 0) {
-            //         this.mergeObj[key].push(1);
-            //   }
-            // })
-        },
-        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-// console.log(this.mergeArr,column.property,rowIndex,this.mergeObj)
-            if (this.mergeArr.indexOf(column.property) !== -1) {
-                if (this.mergeObj[column.property][rowIndex]) {
-                return [this.mergeObj[column.property][rowIndex], 1]
-                } else {
-                return [0, 0];
-                } 
-            }
+            },
+            objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+                if (this.mergeArr.indexOf(column.property) !== -1) {
+                    if (this.mergeObj[column.property][rowIndex]) {
+                    return [this.mergeObj[column.property][rowIndex], 1]
+                    } else {
+                    return [0, 0];
+                    } 
+                }
 
-    }
+        }
     },
 }
 </script>

+ 249 - 78
src/views/report/analysisAndOpinion/components/comparisonResults/components/chooseContrastPlan.vue

@@ -1,82 +1,100 @@
 <template>
-  <div>
-    <div style="background:white;padding:20px;background:#99CCFF;margin-top:20px">
-          <p style="margin-top:0">选择对比方案</p>
-          <el-divider></el-divider>
-          <el-select v-model="ruleForm.type" placeholder="请选择" @change="changeRight" style="padding:20px 0 0 0">
-              <el-option v-for="item in rightList.filter(item=>typeArr.includes(item.type))" :key="item.rightId" :value="item.rightId" :label="item.pRightName"></el-option>
-          </el-select>
-        <el-table
-          ref="table"
-          :data="tableData2"
-          :span-method="objectSpanMethod"
-          :row-class-name="tableRowClassName"
-          :height="tableHeight"
-          border
-          style="min-width: 100%; margin-top: 20px;overflow:auto;">
-        >
-        <el-table-column
-          prop="pRightName"
-          label="标的权利项"
-          align="center"
-          width="200px">
-          <template slot-scope="scope">  
-            <el-tooltip class="item" effect="dark" :content="scope.row.pContent" placement="top">
-              <span>{{scope.row.pRightName}}</span>
-            </el-tooltip>       
-          </template>
-        </el-table-column>
-        <el-table-column
-          prop="content"
-          label="标的权利要求特征"
-          align="center"
-          width="300px">
-          <template slot-scope="scope" >       
-                  {{scope.row.content}}
-          </template>
-        </el-table-column>
-        <el-table-column
-        prop="content"
-        label="公识"
-        align="center"
-        width="100px">
-        <template slot-scope="scope" >     
-          <el-checkbox-group v-model="checkRecord">  
-          <el-checkbox :label="scope.row.id+scope.row.content" @change="getFunInfo(scope.row)">
-                  {{''}}
-              </el-checkbox>
-            </el-checkbox-group>
-        </template>
-      </el-table-column>
-        <el-table-column v-for="(item, index) in tableHeader" :key="index" show-overflow-tooltip align="center" :min-width="item.length > 7 ? '190' : '170'">
-          <template slot="header">
-            <span>
-                <el-link type="primary"  @click="editContrast(item.patentNo)">{{item.patentNo}}(D{{ index+1 }})</el-link>
-            </span>
-            <el-tag style="font-size:12px;border-radius:50%;" v-if="item.remark">{{item.remark}}</el-tag>
-            <i class="el-icon-arrow-down el-icon--right" @click="getVal(item)"></i>
-          </template>
-          <template slot-scope="scope">
-            <el-checkbox-group v-model="checkRecord">
-              <div class="innerTable" v-if="scope.row[item.patentNo]" style="width:calc(100% + 20px);margin-left:-10px;word-wrap:break-word;">
-                 <p v-for="(inc,index) in scope.row[item.patentNo]">
-                  <el-checkbox :label="item.patentNo+scope.row[item.patentNo+'_Id'][index]" @change="getFunInfo(scope.row,item.patentNo,index)" v-if="scope.row[item.patentNo]">
-                  <!-- <el-input style="width:calc(100% + 20px);margin-left:-10px;word-wrap:break-word;" v-model="i"></el-input>  -->
-                  <span>[{{ inc.fields }}]{{inc.content}}<el-image ref="image" :preview-src-list="imgList" v-if="inc.filePath" :src="inc.filePath"  style="vertical-align:middle;width:100px" @click.prevent="showImage(inc.filePath)"></el-image></span> 
-                  </el-checkbox>
-                </p>
-              </div>
-             </el-checkbox-group>
-          </template>
+  <div class="height_100">
+    <div style="background:white;padding:20px;background:#99CCFF;height: calc(100% - 40px);"  v-DivHeight="getDivHeight">
+        <div>
+            <p style="margin-top:0">选择对比方案</p>
+            <el-divider></el-divider>
+            <el-select v-model="ruleForm.claimSort" placeholder="请选择" @change="changeRight" style="padding:20px 0 0 0">
+                <el-option v-for="item in rightList2" :key="item.rightSort" :value="item.rightSort" :label="item.rightName"></el-option>
+            </el-select>
+        </div>
+        <div style="height:(100% - 200px)" >
+            <el-table
+            ref="table"
+            :data="tableData2"
+            :span-method="objectSpanMethod"
+            :row-class-name="tableRowClassName"
+            :maxHeight="tableHeight - 240"
+            border
+            :header-cell-style="{'text-align':'center'}"
+            style="min-width: 100%; margin-top: 20px;overflow:auto;">
+            >
+            <el-table-column
+            prop="rightName"
+            label="标的权利项"
+            align="center"
+            width="200px">
+            <template slot-scope="scope">  
+                <el-tooltip class="item" effect="dark" :content="scope.row.rightContent" placement="top">
+                <span>{{scope.row.rightName}}</span>
+                </el-tooltip>       
+            </template>
+            </el-table-column>
+            <el-table-column
+            prop="featureContent"
+            label="标的权利要求特征"
+            align="center"
+            width="300px">
+            <template slot-scope="scope" >       
+                    {{scope.row.featureContent}}
+            </template>
+            </el-table-column>
+            <el-table-column
+            prop="content"
+            label="公识"
+            align="center"
+            width="100px">
+            <template slot-scope="scope" >     
+                <el-checkbox-group v-model="checkList">  
+                    <el-checkbox :label="scope.row.featureId" class="noWord" @change="changeCommon($event,scope.row)">
+                            {{""}}
+                    </el-checkbox>
+                </el-checkbox-group>
+            </template>
         </el-table-column>
-        </el-table>
+            <el-table-column v-for="(item, index) in tableHeader" :key="index" show-overflow-tooltip :min-width="item.length > 7 ? '190' : '170'">
+            <template slot="header">
+                <span>
+                    <el-link type="primary"  @click="editContrast(item)">{{ item.type == 0?item.literatureNo:item.name }}(D{{ item.sysOrder }})</el-link>
+                </span>
+                <el-tag style="font-size:12px;border-radius:50%;" v-if="item.remark">{{item.remark}}</el-tag>
+                <span>
+                    <my-draggable :list="tableHeader" :check="item.id" @change="changeOrder" @update="updateOrder"></my-draggable>
+                </span>
+            </template>
+            <template slot-scope="scope">
+                <el-checkbox-group v-model="checkList1">
+                <div class="innerTable" v-if="scope.row.evidenceReasons" style="width:calc(100% + 20px);margin-left:-10px;word-wrap:break-word;">
+                    <p v-for="(inc,index) in scope.row.evidenceReasons.filter(i=>i.literatureId == item.id)" :key="inc.evidenceId">
+                    <el-checkbox :label="inc.evidenceId" v-if="scope.row.evidenceReasons" @change="changeEvidence($event,inc,scope.row)">
+                    <!-- <el-input style="width:calc(100% + 20px);margin-left:-10px;word-wrap:break-word;" v-model="i"></el-input>  -->
+                        <span>
+                            [{{ inc.fieldName }}]
+                            <span v-if="inc.common">
+                                (解析过程:{{ inc.common }})
+                            </span>
+                            {{inc.evidenceText}}
+                            <el-image ref="image" :preview-src-list="imgList" v-if="inc.fileGuid" :src="$commonJS.checkViewer(inc.fileGuid)"  style="vertical-align:middle;width:100px" @click.prevent="showImage($commonJS.checkViewer(inc.fileGuid))"></el-image>
+                            <span v-if="inc.conclusion">
+                                ({{ inc.conclusion }})
+                            </span>
+                        </span> 
+                        </el-checkbox>
+                    </p>
+                </div>
+                </el-checkbox-group>
+            </template>
+            </el-table-column>
+            </el-table>   
+        </div>
+        
         <div style="display:flex; justify-content: space-between;align-items:center;padding-top:20px">
           <p>对比结论/原因:</p>
           <div style="width:calc(100% - 200px);">
-            <myRichText v-model="ruleForm.result" placeholder="请输入对比结论/理由(可粘贴图片)"></myRichText>
+            <myRichText v-model="ruleForm.common" placeholder="请输入对比结论/理由(可粘贴图片)"></myRichText>
           </div>
           <div >
-            <el-button type="primary" @click="save">保存</el-button>
+            <el-button type="primary" :loading="btnLoading" @click="save">保存</el-button>
           </div>
         </div>
       </div>
@@ -88,20 +106,173 @@ import mixins from './mixins'
 export default {
     mixins:[mixins],
   components: {},
-  props: {},
+  props: {
+    rightList:{
+        default:()=>{
+            return []
+        }
+    },
+  },
   data() {
     return {
         tableData2:[],
-        rightList:[],
-        ruleForm:{}
+        rightList2:[],
+        ruleForm:{
+            claimSort:0,
+            assoReasonFeatures:[],
+        },
+        checkList:[],
+        checkList1:[],
+        btnLoading:false
     };
   },
-  watch: {},
+  watch: {
+    tableData(val){
+        if(val){
+            this.changeRight()
+        }
+    },
+    showType(val){
+        this.$set(this.ruleForm,'claimSort',0)
+        this.getRightList2()
+    },
+    rightList(val){
+        if(val){
+            this.getRightList2()
+        }
+    }
+  },
   computed: {},
   created() {},
-  mounted() {},
-  methods: {},
+  mounted() {
+    this.getRightList2()
+    if(this.tableData.length>0){
+        this.changeRight()
+    }
+  },
+  methods: {
+    getData(){
+        this.tableData2 = this.tableData.filter(item=>{
+            return item.rightSort == this.ruleForm.claimSort
+        })
+    },
+    getRightList2(){
+        if(this.showType == 1){
+            this.rightList2 = this.rightList.filter(item=>{
+                return item.rightType == 1
+            })
+        }else{
+            this.rightList2 = this.rightList
+        }
+    },
+    changeRight(val){
+        this.tableData2 = this.tableData.filter(item=>{
+            return item.rightSort == this.ruleForm.claimSort
+        })
+        this.getSpanArr(this.tableData2)
+    },
+    changeCommon(val,data){
+        if(!val){
+            var index = this.ruleForm.assoReasonFeatures.findIndex(item=>{
+                return item.featureId == data.featureId && item.reasonId == 0
+            })
+            if(index != -1){
+                this.ruleForm.assoReasonFeatures.splice(index,1)
+            }
+        }else{
+            this.ruleForm.assoReasonFeatures.push(
+                {
+                    featureId:data.featureId,
+                    reasonId:0
+                }
+            )
+        }
+    },
+    changeEvidence(val,row,data){
+        if(!val){
+            var index = this.ruleForm.assoReasonFeatures.findIndex(item=>{
+                return item.featureId == data.featureId && item.reasonId == row.evidenceId
+            })
+            if(index != -1){
+                this.ruleForm.assoReasonFeatures.splice(index,1)
+            }
+        }else{
+            this.ruleForm.assoReasonFeatures.push(
+                {
+                    featureId:data.featureId,
+                    reasonId:row.evidenceId
+                }
+            )
+        }
+    },
+    save(){
+        this.ruleForm.projectId = this.projectId
+        this.btnLoading = true
+
+        if(this.ruleForm.assoReasonFeatures.length == 0){
+            this.$message.warning('请选择对比记录')
+            return
+        }
+        this.$api.addCompareRecordGroup(this.ruleForm).then(response=>{
+            if(response.code == 200){
+                this.$message.success('添加成功')
+                this.$set(this.ruleForm,'assoReasonFeatures',[])
+                this.$set(this,'checkList',[])
+                this.$set(this,'checkList1',[])
+                this.$set(this.ruleForm,'common','')
+                this.btnLoading =false
+            }
+        }).catch(error=>{
+            this.$message.error('添加失败')
+            this.btnLoading = false
+        })
+    },
+  },
 };
 </script>
+<style lang="scss">
+.success-row {
+  background-color:#eaf3fb !important; 
+}
+.innerTable .el-checkbox__label{
+  /* padding: 20px 0; */
+  width: calc(100% - 20px);
+  /* height: 128px; */
+  text-align: left;
+  display:inline-grid;
+  white-space: pre-line;
+  word-wrap: break-word;
+  overflow: auto;
+}
+.innerTable p:last-child:first-child .el-checkbox__label{
+   
+    height: 100%;
+  }
+
+</style>
 <style lang="scss" scoped>
+
+.innerTable p{
+  /* min-width:200px; */
+  padding: 20px 10px;
+  margin: 0;
+  display: flex;
+  justify-content: flex-start;
+  align-items:center;
+  // height: 130px;
+  line-break:normal;
+  overflow: auto;
+  border-bottom:1px solid #EBEEF5;
+}
+.innerTable p:last-child:first-child {
+    //item 即是最后一个元素 又是第一个元素
+    height: 100%;
+  }
+.innerTable p:nth-child(1){
+  border-bottom: 1px solid #EBEEF5;
+}
+.innerTable p:last-child{
+  border-bottom: none;
+}
+
 </style>

+ 75 - 64
src/views/report/analysisAndOpinion/components/comparisonResults/components/contrastRecord.vue

@@ -1,10 +1,12 @@
 <template>
-  <div class="height_100">
+  <div class="height_100" v-DivHeight="getDivHeight">
     <el-table
       ref="table"
       :data="recordData"
       border
-      :height="tableHeight2"
+      :maxHeight="tableHeight"
+      v-loading="loading"
+      :header-cell-style="{'text-align':'center'}"
       style="min-width: 100%; overflow: auto"
     >
       <el-table-column
@@ -15,8 +17,8 @@
       >
         <template slot-scope="scope">
           <span>
-            <el-link type="primary" @click="editContrast(scope.row.patentNo)"
-              >{{ scope.row.patentNo }}(D{{ scope.$index + 1 }})</el-link
+            <el-link type="primary" @click="editContrast(scope.row)"
+              >{{ scope.row.type == 0?scope.row.literatureNo:scope.rwo.name }}(D{{ scope.row.sysOrder }})</el-link
             >
           </span>
           <el-tag
@@ -24,66 +26,39 @@
             v-if="scope.row.remark"
             >{{ scope.row.remark }}</el-tag
           >
-          <el-popover
-            placement="bottom"
-            width="200"
-            trigger="click"
-            v-if="$reportPermission(reportId, [0, 1])"
-          >
-            <p>
-              将本文件(<span style="color: red">{{ scope.row.patentNo }}</span
-              >)作为:
-            </p>
-            <el-tree
-              ref="tree"
-              :data="tableHeader"
-              :props="{ label: 'patentNo' }"
-              @node-drop="handleDrop"
-              :allow-drop="allowDrop"
-              draggable
-              @check-change="handleCheckChange"
-            >
-              <span class="custom-tree-node" slot-scope="{ node, data }"
-                ><el-radio
-                  v-model="val"
-                  @input="changeRadio(scope.row, data)"
-                  :label="node.label"
-                  >D{{
-                    tableHeader.findIndex(
-                      (item) => item.patentNo == data.patentNo
-                    ) + 1
-                  }}</el-radio
-                ></span
-              >
-            </el-tree>
-            <p style="color: red">备注:选择其中一个文件与其交换位置</p>
-            <i
-              class="el-icon-arrow-down el-icon--right"
-              @click="getVal(scope.row)"
-              slot="reference"
-            ></i>
-          </el-popover>
+          <span>
+                <my-draggable :list="tableHeader" :check=" scope.row.id" @change="changeOrder" @update="updateOrder"></my-draggable>
+            </span>
         </template>
       </el-table-column>
       <el-table-column
         prop="content"
         label="对比记录"
-        align="center"
         min-width="300px"
       >
         <template slot-scope="scope">
-          <div v-for="item in scope.row.recordList" :key="JSON.stringify(item)">
+          <div v-for="item in scope.row.recordList" :key="item.evidenceId">
             <p>
-              {{ item.content
-              }}<el-image
+                <span>
+                    <el-link style="color:red;margin-left:10px" @click="delContrast(item.evidenceId)">删除</el-link>
+                </span>
+                <span>【{{ item.fieldName }}】</span>
+                <span v-if="item.common">
+                    (解析过程:{{ item.common }})
+                </span>
+                {{ item.evidenceText}}
+              <el-image
                 ref="image"
                 :preview-src-list="imgList"
-                v-if="item.filePath"
-                :src="item.filePath"
+                v-if="item.fileGuid"
+                :src="$commonJS.checkViewer(item.fileGuid)"
                 style="vertical-align: middle; width: 100px"
-                @click="showImage(item.filePath)"
+                @click="showImage($commonJS.checkViewer(item.fileGuid))"
               ></el-image
-              ><span>【{{ item.fields }}】</span>
+              >
+              <span v-if="item.conclusion">
+                    ({{ item.conclusion }})
+                </span>
             </p>
           </div>
         </template>
@@ -96,23 +71,18 @@
       >
         <template slot-scope="scope">
           <div
-            v-for="item in scope.row.featuresList.sort((a, b) => {
-              return (
-                a.rightName.slice(2, a.rightName.length) -
-                b.rightName.slice(2, b.rightName.length)
-              );
-            })"
-            :key="JSON.stringify(item)"
+            v-for="item in scope.row.recordList"
+            :key="item.evidenceId"
           >
             <p>
               <span>
                 <el-tooltip
                   class="item"
                   effect="dark"
-                  :content="item.content"
+                  :content="item.featureContent"
                   placement="top-start"
                 >
-                  <span>特征{{ item.featuresOrder }}</span>
+                  <span>特征{{ item.featureSysOrder }}</span>
                 </el-tooltip>
               </span>
               <span>
@@ -140,13 +110,54 @@ export default {
   components: {},
   props: {},
   data() {
-    return {};
+    return {
+        recordData:[]
+    };
+  },
+  watch: {
+    tableData(){
+        if(val){
+            this.getData()
+        }
+    }
   },
-  watch: {},
   computed: {},
   created() {},
-  mounted() {},
-  methods: {},
+  mounted() {
+    if(this.tableData.length>0){
+        this.getData()
+    }
+  },
+  methods: {
+    getData(){
+        var data = {}
+        for(var i = 0;i<this.tableHeader.length;i++){
+            data[this.tableHeader[i].id] = this.tableHeader[i]
+            data[this.tableHeader[i].id].recordList = []
+        }
+        for(var i = 0;i<this.tableData.length;i++){
+            if(this.tableData[i].evidenceReasons && this.tableData[i].evidenceReasons.length>0){
+                var evidenceReasons = this.tableData[i].evidenceReasons
+                for(var j = 0;j<evidenceReasons.length;j++){
+                    data[evidenceReasons[j].literatureId].recordList.push(
+                        {
+                            ...evidenceReasons[j],
+                            rightName: this.tableData[i].rightName,
+                            rightContent: this.tableData[i].rightContent,
+                            rightSort: this.tableData[i].rightSort,
+                            rightType: this.tableData[i].rightType,
+                            featureContent: this.tableData[i].featureContent,
+                            featureSysOrder: this.tableData[i].featureSysOrder,
+                            featureName: this.tableData[i].featureName,
+                            featureId:this.tableData[i].featureId,
+                        }
+                    )
+                }
+            }
+        }
+        this.recordData = Object.values(data)
+    }
+  },
 };
 </script>
 <style lang="scss" scoped>

+ 52 - 21
src/views/report/analysisAndOpinion/components/comparisonResults/components/contrastResult.vue

@@ -7,10 +7,12 @@
       :row-class-name="tableRowClassName"
       :maxHeight="tableHeight"
       border
+      v-loading="loading"
+      :header-cell-style="{'text-align':'center'}"
       style="min-width: 100%; overflow: auto"
     >
       <el-table-column
-        prop="pRightName"
+        prop="rightName"
         label="标的权利项"
         align="center"
         width="200px"
@@ -19,48 +21,63 @@
           <el-tooltip
             class="item"
             effect="dark"
-            :content="scope.row.pContent"
+            :content="scope.row.rightContent"
             placement="top"
           >
-            <span>{{ scope.row.pRightName }}</span>
+            <span>{{ scope.row.rightName }}</span>
           </el-tooltip>
         </template>
       </el-table-column>
       <el-table-column
-        prop="content"
+        prop="featureContent"
         label="标的权利要求特征"
-        align="center"
         width="300px"
       >
         <template slot-scope="scope">
-          {{ scope.row.content }}
+          {{ scope.row.featureContent }}
         </template>
       </el-table-column>
 
       <el-table-column v-for="(item, index) in tableHeader" :key="index" :min-width="item.length > 6 ? '190' : '110'">
         <template slot="header">
-          <span>
-            <el-link type="primary" @click="editContrast(item.patentNo)">{{ item.patentNo }}(D{{ index + 1 }})</el-link>
-          </span>
-          <el-tag style="font-size: 12px; border-radius: 50%" v-if="item.remark">{{ item.remark }}</el-tag>
-            <i class="el-icon-arrow-down el-icon--right"  @click="getVal(item)"></i>
+            <span>
+                <span>
+                    <el-link type="primary" @click="editContrast(item)">{{ item.type == 0?item.literatureNo:item.name }}(D{{ item.sysOrder }})</el-link>
+                </span>
+                <el-tag style="font-size: 12px; border-radius: 50%" v-if="item.remark">{{ item.remark }}</el-tag>
+                <span>
+                    <my-draggable :list="tableHeader" :check="item.id" @change="changeOrder" @update="updateOrder"></my-draggable>
+                </span>
+            </span>
+          
         </template>
         <template slot-scope="scope">
           <div
             class=""
-            v-if="scope.row[item.patentNo]"
+            v-if="scope.row.evidenceReasons"
             style="width: calc(100% + 20px); margin-left: -10px"
           >
-            <p v-for="i in scope.row[item.patentNo]">
-              [{{ i.fields }}]{{ i.content }}
+            <p v-for="i in scope.row.evidenceReasons.filter(i=>i.literatureId == item.id)" :key="i.evidenceId">
+              <span>
+                <el-link style="color:red;margin-left:10px" @click="delContrast(i.evidenceId)">删除</el-link>
+              </span>
+              [{{ i.fieldName }}]
+              <span v-if="i.common">
+                (解析过程:{{ i.common }})
+              </span>
+              
+              {{ i.evidenceText }}
               <el-image
                 ref="image"
                 :preview-src-list="imgList"
-                v-if="i.filePath"
-                :src="i.filePath"
+                v-if="i.fileGuid"
+                :src="$commonJS.checkViewer(i.fileGuid)"
                 style="vertical-align: middle; width: 100px"
-                @click="showImage(i.filePath)"
+                @click="showImage($commonJS.checkViewer(i.fileGuid))"
               ></el-image>
+              <span v-if="i.conclusion">
+                ({{ i.conclusion }})
+                </span>
             </p>
           </div>
         </template>
@@ -76,13 +93,27 @@ export default {
   components: {},
   props: {},
   data() {
-    return {};
+    return {
+        
+    };
+  },
+  watch: {
+    tableData(val){
+        if(val){
+            this.getSpanArr(this.tableData)
+        }
+    }
   },
-  watch: {},
   computed: {},
   created() {},
-  mounted() {},
-  methods: {},
+  mounted() {
+    if(this.tableData.length>0){
+        this.getSpanArr(this.tableData)
+    }
+  },
+  methods: {
+    
+  },
 };
 </script>
 <style lang="scss" scoped>

+ 64 - 2
src/views/report/analysisAndOpinion/components/comparisonResults/components/mixins/index.js

@@ -1,6 +1,10 @@
 import { getTableHeight } from '@/views/components/mixins'
+import myDraggable from '@/views/report/InvalidResponse/components/draggable/index.vue'
 export default {
     mixins:[getTableHeight],
+    components:{
+        myDraggable
+    },
     props:{
         //表格数据
         tableData:{
@@ -17,16 +21,40 @@ export default {
             default:()=>{
                 return []
             }
+        },
+        loading:{
+            default:false
+        },
+        projectId:{
+            default:0
+        },
+        reportType:{
+            default:''
+        },
+        patentNo:{
+            default:''
         }
     },
+    watch:{
+       
+    },
     data() {
         return {
             mergeObj: {},
-            mergeArr: ['id', 'pRightName'],
+            mergeArr: ['rightName'],
+            imgList:[]
         }
     },
+    mounted() {
+        
+    },
     methods: {
         tableRowClassName({ row, rowIndex }){},
+        //查看图片
+        showImage(url){
+            this.imgList=[url]
+            this.$refs.image.showViewer = true
+        },
         getSpanArr(data) {
             this.mergeArr.forEach((key, index1) => {
               let count = 0;
@@ -56,6 +84,40 @@ export default {
                 return [0, 0];
               }
             }
-          }
+          },
+          changeOrder(now,old){
+            this.$emit('changeOrder',now,old)
+          },
+          updateOrder(now,old){
+            this.$emit('updateOrder',now,old)
+          },
+          delContrast(id){
+            var ids = [id]
+            this.$confirm('确认删除该数据吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$api.removeCompareRecord(ids).then(response => {
+                    this.$emit('update',true)
+                }).catch(error => {
+                })
+            })
+        },
+        editContrast(row){
+            this.$s.setSession('search', {})
+            this.$router.push(
+                {
+                  path: '/patentDetails/' + row.literatureNo,
+                  query: {
+                    projectId: this.projectId,
+                    reportType:this.reportType,
+                    evidenceType:row.type,
+                    evidence:JSON.stringify(row),
+                    signPatentNo:this.patentNo
+                  }
+                }
+              )
+        }
     },
 }

+ 147 - 12
src/views/report/analysisAndOpinion/components/comparisonResults/index.vue

@@ -5,7 +5,7 @@
             <div class="head">
                 <div>
                     <el-button @click="changeShow(1)" type="primary" :plain="!isSelect">对比结果查看</el-button>
-                    <el-button @click="changeShow(2)" type="primary" :plain="isSelect" v-if=" $reportPermission(reportId,[0,1])">对比方案选择</el-button>
+                    <el-button @click="changeShow(2)" type="primary" :plain="isSelect" v-if=" $reportPermission(projectId,[0,1])">对比方案选择</el-button>
                 </div>
                 <div>
                     <el-select placeholder="请选择显示类型" v-model="Type" style="margin-left: 10px;" @change="TypeSelect($event)" >
@@ -20,17 +20,17 @@
             <div class="height_100" v-show="!isSelect">
                 <el-container>
                     <el-header class="basic_header">
-                        <el-tabs v-model="activeName" @tab-click="handleClick" style="width:100%">
+                        <el-tabs v-model="activeName" style="width:100%">
                             <el-tab-pane v-for="item in menu" :key='item.path' :label="item.label" :name="item.path"></el-tab-pane>
                         </el-tabs>
                     </el-header>
                     <el-main>
-                        <component :is='activeName' :tableData="tableData" :showType="Type"></component>
+                        <component :is='activeName' :loading="loading" :patentNo="patentNo" :reportType="reportType" :projectId="projectId" :tableData="tableData" :tableHeader="tableHeader" :showType="Type" @changeOrder="changeOrder" @updateOrder="updateOrder" @update="getData"></component>
                     </el-main>
                 </el-container>
             </div>
-            <div v-show="isSelect">
-                <chooseContrastPlan :tableData="tableData" :showType="Type"></chooseContrastPlan>
+            <div class="height_100" v-if="isSelect">
+                <chooseContrastPlan :loading="loading" :patentNo="patentNo" :reportType="reportType" :projectId="projectId" :tableData="tableData" :tableHeader="tableHeader" :rightList="rightList" :showType="Type"></chooseContrastPlan>
             </div>
         </el-main>
     </el-container>
@@ -50,10 +50,17 @@ export default {
   props: {
     projectId:{
         default:0
+    },
+    reportType:{
+        default:''
+    },
+    patentNo:{
+        default:''
     }
   },
   data() {
     return {
+        tableHeader:[],
         tableData:[],
         originalData:[],
         Type:'0',
@@ -68,35 +75,163 @@ export default {
                 label:'对比记录',
                 path:'contrastRecord'
             }
-        ]
+        ],
+        loading:false,
+        rightList:[],
     };
   },
   watch: {},
   computed: {},
   created() {},
   mounted() {
-    this.getList()
+    this.getData()
   },
   methods: {
+
+    async getData(){
+        this.loading = true
+        const [tableHeader,originalData] = await Promise.allSettled([this.getTableHeader(),this.getList()])
+        this.tableHeader = tableHeader.status =='fulfilled'?tableHeader.value:[]
+        this.originalData = originalData.status =='fulfilled'?originalData.value:[]
+        this.TypeSelect(this.Type)
+        this.getRightList()
+        this.loading = false
+    },
+    getTableHeader(){
+        var params = {
+            projectId:this.projectId
+        }
+        return this.$api.getComparedLiteratures(params).then(response=>response.data.data)
+    },
     //获取对比结果
     getList(){
-
+        var params = {
+            projectId:this.projectId
+        }
+        return this.$api.queryAllCompareRecord(params).then(response=>response.data.data)
+    },
+    getRightList(){
+        var obj = {}
+        for(var i = 0;i<this.originalData.length;i++){
+            if(!obj[this.originalData[i].rightSort]){
+                obj[this.originalData[i].rightSort] = {
+                    rightContent: this.originalData[i].rightContent,
+                    rightName: this.originalData[i].rightName,
+                    rightSort: this.originalData[i].rightSort,
+                    rightType:this.originalData[i].rightType,
+                }
+            }
+        }
+        this.rightList = Object.values(obj)
     },
     //切换查看结果和选择对比方案
     changeShow(type){
-
+        if(type == 1){
+            this.isSelect = false
+        }
+        else if(type == 2){
+            this.isSelect = true
+        }
     },
     //切换主权要
     TypeSelect(val){
+        this.tableData = []
         if(val == 1){
             this.tableData = this.originalData.filter(item=>{
-                return
+                return item.rightType == 1
             })
         }else if(val == 0){
             this.tableData = this.originalData
         }
-        
-    }
+    },
+        /**
+         * 交换位置
+         * @param {*} now 和谁交换,交换后的排序
+         * @param {*} old 交换前的
+         */
+         changeOrder(now,old){
+            var nowIndex = this.tableHeader.findIndex(item=>{
+                return item.id == now
+            })
+            var oldIndex = this.tableHeader.findIndex(item=>{
+                return item.id == old
+            })
+            if(nowIndex == -1 || oldIndex == -1){
+                return
+            }
+            var data = [
+                {
+                    id:now,
+                    sysOrder:this.tableHeader[oldIndex].sysOrder
+                },
+                {
+                    id:old,
+                    sysOrder:this.tableHeader[nowIndex].sysOrder
+                }
+            ]
+            this.updateLiteratureOrder(data)
+        },
+        /**
+         * 拖动排序
+         * @param {*} now 拖动后的位置
+         * @param {*} old 拖动前的位置
+         */
+        updateOrder(now,old){
+            if(now == old){
+                return
+            }
+            var min = 0,
+            max = 0,
+            type=true,
+            currentOrder = null
+            if(now<old){//上移
+                min = now
+                max = old
+            }else{//下移
+                min = old
+                max = now
+                type = false
+            }
+            currentOrder = this.tableHeader[now].sysOrder
+            var data = []
+            for(var i = min;i<= max;i++){
+                var order = this.tableHeader[i].sysOrder
+                var obj = {
+                    id:this.tableHeader[i].id
+                }
+                if(type){
+                    if(i == max){
+                        obj.sysOrder = currentOrder
+                    }else{
+                        obj.sysOrder = Number(order)+1
+                    }
+                }else{
+                    if(i == min){
+                        obj.sysOrder = currentOrder
+                    }else{
+                        obj.sysOrder = Number(order)-1
+                    }
+                }
+                data.push(obj)
+            }
+            this.updateLiteratureOrder(data)
+        },
+        //更新排序
+        updateLiteratureOrder(dtoList){
+            this.$api.updateLiteratureOrder(dtoList).then(response=>{
+                if(response.code == 200){
+                    this.$message.success('更新排序成功')
+                    this.updateHeader()
+                }
+            }).catch(error=>{
+                this.$message.error('更新排序失败')
+            })
+        },
+        async updateHeader(){
+            const [tableHeader] = await Promise.allSettled([this.getTableHeader()])
+            this.tableHeader = tableHeader.status =='fulfilled'?tableHeader.value:[]
+            this.TypeSelect(this.Type)
+        }
   },
 };
 </script>

+ 27 - 18
src/views/report/components/dialog/addAndEditReport.vue

@@ -17,7 +17,7 @@
                 </el-form-item>
                 <el-form-item v-else label="标的专利" prop="signPatentNo">
                   <div style="display:flex;align-items:center">
-                    <el-input v-model="form.signPatentNo" autocomplete="off" placeholder="请输入标的专利" @change="getPatentNo" @blur="checkPatent(form.signPatentNo)"></el-input>
+                    <el-input v-model="form.signPatentNo" autocomplete="off" placeholder="请输入标的专利" @change="getPatentNo"></el-input>
                     <span v-if="patentLoading"> 
                       <i class="el-icon-loading"></i>
                     </span>
@@ -37,24 +37,24 @@
           <div>
             <el-row>
               <el-col :span="12">
-                <el-form-item label="案件编号">
+                <el-form-item label="案件编号" prop="caseNumber">
                   <el-input v-model="form.caseNumber" @change="getPatentNo" autocomplete="off" placeholder="请输入案件编号"></el-input>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="无效宣告请求人">
+                <el-form-item label="无效宣告请求人" prop="invalidApplication">
                     <el-input v-model="form.invalidApplication" autocomplete="off" placeholder="请输入无效宣告请求人"></el-input>
                   </el-form-item>
               </el-col>
             </el-row>
             <el-row>
               <el-col :span="12">
-                <el-form-item label="发文序号">
+                <el-form-item label="发文序号" prop="issueNumber">
                   <el-input v-model="form.issueNumber" autocomplete="off" placeholder="请输入发文序号"></el-input>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="发明创造名称">
+                <el-form-item label="发明创造名称" prop="inventionName">
                   <el-input v-model="form.inventionName" autocomplete="off" placeholder="请输入发明创造名称"></el-input>
                 </el-form-item>
               </el-col>
@@ -63,7 +63,7 @@
         </template>
         <el-row>
               <el-col :span="12">
-                <el-form-item label="主被动类型">
+                <el-form-item label="主被动类型" prop="actType">
                   <el-select v-model="form.actType" placeholder="请选择" style="width:100%">
                     <el-option
                       v-for="item in actTypes "
@@ -75,7 +75,7 @@
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item label="是否完成" v-if="!form.id">
+                <el-form-item label="是否完成" v-if="!form.id" prop="status">
                   <el-switch v-model="form.status" active-color="#13ce66" inactive-color="#ff4949" @change="changeStatus"
                     :active-value="3" :inactive-value="2">
                   </el-switch>
@@ -85,16 +85,16 @@
         
         <template v-if="!form.id && form.status == 3">
           <div>
-            <el-form-item label="核心结论">
+            <el-form-item label="核心结论" prop="cronIds">
               <el-checkbox-group v-model="form.cronIds">
                 <el-checkbox v-for="item in conclusion" :key="item.value" :label="item.value">{{
                   item.label }}</el-checkbox>
               </el-checkbox-group>
             </el-form-item>
-            <el-form-item label="结论论述">
+            <el-form-item label="结论论述" prop="cronDescription">
               <el-input v-model="form.cronDescription" type="textarea" placeholder="请输入结论论述"></el-input>
             </el-form-item>
-            <el-form-item label="后续跟进事项" v-if="$permission('/rms/matter')">
+            <el-form-item label="后续跟进事项" v-if="$permission('/rms/matter')" prop="followUps">
               <span v-if="form.followUps"><span v-for="item in form.followUps" :key="item.followUpName"
                   style="margin-right:10px">{{ item.followUpName }}</span></span>
               <span>
@@ -153,19 +153,19 @@
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="产品/技术">
+            <el-form-item label="产品/技术" prop="productOrTech">
               <el-input v-model="form.productOrTech" autocomplete="off" placeholder="请输入产品/技术"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="form.track ? 12 : 24">
-            <el-form-item label="关联报告">
+            <el-form-item label="关联报告" prop="associateReportName">
               <el-input v-model="form.associateReportName" autocomplete="off" placeholder="请输入关联报告"></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="需要复制的选项" v-show="form.track">
+            <el-form-item label="需要复制的选项" v-show="form.track" prop="copyIds">
               <el-select v-model="form.copyIds" multiple clearable placeholder="请选择需要复制的选项" :popper-append-to-body="false"
                 @change="changeCopyIds">
                 <el-option v-for="item in copyList" :key="item.value" :label="item.label" :value="item.value"></el-option>
@@ -177,7 +177,7 @@
           <div>
             <el-row>
               <el-col :span="24">
-                <el-form-item label="事件:">
+                <el-form-item label="事件:" prop="eventId">
                   <mySelectButton size='large' style="width:100%" @click="addEvent">
                     <div style="width:100%">
                       <el-select style="width:100%" v-model="form.eventId" @change="changeEvent" filterable remote
@@ -193,7 +193,7 @@
             </el-row>
             <el-row v-if="show == true">
               <el-col :span="24">
-                <el-form-item label="调查类型:" prop="matterIds">
+                <el-form-item label="调查类型:" prop="matterIds" >
                   <el-checkbox-group v-model="form.matterIds">
                     <template>
                       <el-checkbox v-for="item in dictAssociates" :key="item.id" :label="parseInt(item.id)">
@@ -208,7 +208,7 @@
         </template>
         <template v-if="form.reportType == 7 && !form.id">
           <div>
-            <el-form-item label="无效请求书">
+            <el-form-item label="无效请求书" prop="flowPath">
               <div v-if="form.flowPath">
                 <div v-if="form.flowPath.systemFileList && form.flowPath.systemFileList.length>0">
                   <div v-for="item in form.flowPath.systemFileList" :key="item.guid">
@@ -223,7 +223,7 @@
             </el-form-item>
           </div>
         </template>
-        <el-form-item :label="(!form.id && form.status == 3) ? '上传报告文档' : '上传附件'">
+        <el-form-item :label="(!form.id && form.status == 3) ? '上传报告文档' : '上传附件'" prop="systemFileList">
           <myUpload :file-list="form.systemFileList" @on-change="onchangeFile" @on-remove="onRemove" style="height: 180px;" :autoUpload="true"></myUpload>
         </el-form-item>
         <el-form-item label="备注" prop="description">
@@ -809,10 +809,14 @@ export default {
           name+=a
           this.$set(this.form, 'name', name)
         }
+        this.checkPatent()
       // }
     },
     //校验专利是否存在
     checkPatent(){
+      if(!this.form.signPatentNo){
+        return
+      }
       var params = {
         patentNo:this.form.signPatentNo
       }
@@ -919,7 +923,12 @@ export default {
         if (valid) {
           this.form.type = 2//项目类型(1专利数据库 2报告 3专利挖掘项目)
           // 判断文件是否都上传完毕
-          this.$commonJS.allUploadFile(this.form)
+          var guids = this.$commonJS.checkUploadFile(this.form.systemFile)
+            if(!guids){
+                return false
+            }
+            this.form.fileGuids = guids
+          // this.$commonJS.allUploadFile(this.form)
           // 事件及调查类型处理
           if (this.form.scenarioIds && this.form.scenarioIds.length > 0) {
             var scenarioIds = JSON.parse(JSON.stringify(this.form.scenarioIds))

+ 14 - 2
src/views/report/components/splitPage/splitPage.vue

@@ -200,10 +200,22 @@ export default {
       if(val){
         this.getRight()
       }
-    }
+    },
+    checkFeatures(val){
+      if(val){
+        this.checkList = val
+      }
+    },
+    checkData(val){
+      if(val){
+        this.scopeRow = val
+      }
+    },
   },
 
   async mounted() {
+    this.scopeRow = this.checkData || []
+    this.checkList = this.checkFeatures || []
     //获取权要
     this.getRight()
     if (this.tableData.length > 0) {
@@ -299,7 +311,7 @@ export default {
     //获取每个元素所需合并的行数
     getSpanArr(data) {
 
-      this.scopeRow = []
+      this.scopeRow =  this.checkData || []
       this.mergeArr.forEach((key, index1) => {
         let count = 0;
         this.mergeObj[key] = [];