瀏覽代碼

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

zhuhao 1 年之前
父節點
當前提交
7d0a7c0ccd
共有 27 個文件被更改,包括 1242 次插入125 次删除
  1. 2 0
      src/api/index.js
  2. 8 0
      src/api/newApi/common.js
  3. 115 0
      src/api/newApi/otherPatentInformation.js
  4. 12 4
      src/router/index.js
  5. 2 4
      src/store/modules/chart.js
  6. 1 1
      src/utils/model/contextMenu/index.vue
  7. 3 1
      src/views/analyse/custom/components/Tabs/Item.vue
  8. 2 2
      src/views/analyse/custom/index.vue
  9. 16 15
      src/views/home/components/echarts/components/event.vue
  10. 1 1
      src/views/layout/mixins/index.js
  11. 23 18
      src/views/login/compoments/invite/index.vue
  12. 4 0
      src/views/product/components/framework/viewIndex.vue
  13. 6 63
      src/views/product/components/index.vue
  14. 69 0
      src/views/product/components/mixins/fun.js
  15. 5 0
      src/views/project/patentCollection/components/views/Table.vue
  16. 59 1
      src/views/project/patentCollection/index.vue
  17. 24 3
      src/views/project/patentDetails/components/patentDetails.vue
  18. 102 0
      src/views/project/patentDetails/components/patentMessage/history/dialog/form.vue
  19. 229 0
      src/views/project/patentDetails/components/patentMessage/history/licenseHistory.vue
  20. 239 0
      src/views/project/patentDetails/components/patentMessage/history/litigationHistory.vue
  21. 38 0
      src/views/project/patentDetails/components/patentMessage/history/mixins/index.js
  22. 220 0
      src/views/project/patentDetails/components/patentMessage/pageProduct.vue
  23. 10 8
      src/views/report/InvalidResponse/components/reasonsAndEvidence/details.vue
  24. 26 1
      src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue
  25. 1 1
      src/views/report/components/details/index.vue
  26. 13 2
      src/views/report/components/index.vue
  27. 12 0
      src/views/report/components/productResult/productResult.vue

+ 2 - 0
src/api/index.js

@@ -37,6 +37,7 @@ import task2 from "./newApi/task"
 import importAndExport from './newApi/importAndExport'
 import patent from './newApi/patent'
 import custom from "./newApi/custom";
+import otherPatentInformation from "./newApi/otherPatentInformation";
 
 export default {
   ...report,
@@ -74,4 +75,5 @@ export default {
   ...importAndExport,
   ...patent,
   ...custom,
+  ...otherPatentInformation
 }

+ 8 - 0
src/api/newApi/common.js

@@ -119,6 +119,14 @@ export default {
     return axios.post("/xiaoshi/customOption/deleteCustomOption", data);
   },
 
+  /**
+  * 查询所有标引栏位对应选择的值
+  * @param {*} data 
+  * @returns 
+  */
+  getPatentFields(data) {
+    return axios.post("/xiaoshi/customField/getPatentFields", data);
+  },
 
   /**
   * 查询所有标引栏位

+ 115 - 0
src/api/newApi/otherPatentInformation.js

@@ -0,0 +1,115 @@
+import axios from "@/utils/axios";
+export default {
+  /**
+   * 诉讼历史
+   * 新增或编辑诉讼历史
+   * @param {*} data 
+   * @returns 
+   */
+  addLitigationHistory(data) {
+    return axios.post("/xiaoshi/litigationHistory/saveOrUpdate", data);
+  },
+  /**
+   * 诉讼历史
+   * 删除诉讼历史
+   * @param {*} data 
+   * @returns 
+   */
+  deleteLitigationHistory(data) {
+    return axios.post("/xiaoshi/litigationHistory/delete", data);
+  },
+  /**
+   * 诉讼历史
+   * 查询诉讼历史
+   * @param {*} data 
+   * @returns 
+   */
+  queryLitigationHistory(data) {
+    return axios.post("/xiaoshi/litigationHistory/query", data);
+  },
+
+  /**
+   * 审查历史
+   * 新增或编辑审查历史
+   * @param {*} data 
+   * @returns 
+   */
+  addReviewHistory(data) {
+    return axios.post("/xiaoshi/reviewHistory/saveOrUpdate", data);
+  },
+  /**
+   * 审查历史
+   * 删除审查历史
+   * @param {*} data 
+   * @returns 
+   */
+  deleteReviewHistory(data) {
+    return axios.post("/xiaoshi/reviewHistory/delete", data);
+  },
+  /**
+   * 审查历史
+   * 查询审查历史
+   * @param {*} data 
+   * @returns 
+   */
+  queryReviewHistory(data) {
+    return axios.post("/xiaoshi/reviewHistory/query", data);
+  },
+
+
+  /**
+   * 其他参考资料
+   * 新增或编辑其他参考资料
+   * @param {*} data 
+   * @returns 
+   */
+  addOtherReferences(data) {
+    return axios.post("/xiaoshi/otherReferences/saveOrUpdate", data);
+  },
+  /**
+   * 其他参考资料
+   * 删除其他参考资料
+   * @param {*} data 
+   * @returns 
+   */
+  deleteOtherReferences(data) {
+    return axios.post("/xiaoshi/otherReferences/delete", data);
+  },
+  /**
+   * 其他参考资料
+   * 查询其他参考资料
+   * @param {*} data 
+   * @returns 
+   */
+  queryOtherReferences(data) {
+    return axios.post("/xiaoshi/otherReferences/query", data);
+  },
+
+  /**
+   * 许可历史
+   * 新增或编辑许可历史
+   * @param {*} data 
+   * @returns 
+   */
+  addPermissionRecord(data) {
+    return axios.post("/xiaoshi/permissionRecord/saveOrUpdate", data);
+  },
+  /**
+   * 许可历史
+   * 删除许可历史
+   * @param {*} data 
+   * @returns 
+   */
+  deletePermissionRecord(data) {
+    return axios.post("/xiaoshi/permissionRecord/delete", data);
+  },
+  /**
+   * 许可历史
+   * 查询许可历史
+   * @param {*} data 
+   * @returns 
+   */
+  queryPermissionRecord(data) {
+    return axios.post("/xiaoshi/permissionRecord/query", data);
+  },
+}

+ 12 - 4
src/router/index.js

@@ -1,6 +1,7 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
 import Cookies from 'js-cookie'
+import Permission from '@/utils/permissions'
 
 Vue.use(VueRouter)
 
@@ -60,7 +61,8 @@ const routes = [
             meta: {
               title: '专利数据库',
               sign: 'project',
-              belong: 'project'
+              belong: 'project',
+              permission:'xiaoshi/project'
             },
             component: () => import('@/views/project/index.vue'),
           },
@@ -169,7 +171,8 @@ const routes = [
             meta: {
               title: '产品',
               sign: 'product',
-              belong: 'Product'
+              belong: 'Product',
+              permission:'xiaoshi/product'
             },
             component: () => import('@/views/product/index.vue'),
           },
@@ -265,7 +268,8 @@ const routes = [
             meta: {
               title: '报告',
               sign: 'report',
-              belong: 'AllReport'
+              belong: 'AllReport',
+              permission:'xiaoshi/report'
             },
             component: () => import('@/views/report/index.vue'),
           },
@@ -473,7 +477,8 @@ const routes = [
         meta: {
           title: '专利检索',
           sign: 'conditionImport',
-          belong: 'conditionImport'
+          belong: 'conditionImport',
+          permission:'xiaoshi/patentSearch'
         },
         component: () => import('@/views/components/import/conditionImport'),
       },
@@ -557,6 +562,9 @@ router.beforeEach((to, from, next) => {
     }
     next()
   }
+  else if(to.meta.permission && !Permission.FunPermissions(to.meta.permission)){
+    next({ path: '/401' })
+  }
   else if (to.meta.allowPath) {
     if (to.meta.title) {
       document.title = to.meta.title;

+ 2 - 4
src/store/modules/chart.js

@@ -70,10 +70,8 @@ export default {
     async getSourceDataList({ commit, state, getters, dispatch }, dimension) {
       let form = { ...state.form }
       state.selectedLoad[dimension] = true
-      if(!form.schema[dimension].field){
-        return
-      }
-      if (form.schema[dimension].ptype !== 0 && form.schema[dimension].ptype !== 4 &&  form.schema[dimension].ptype !== 3) {
+
+      if (form.schema[dimension].field && form.schema[dimension].ptype !== 0 && form.schema[dimension].ptype !== 4 &&  form.schema[dimension].ptype !== 3) {
         // let params = {
         //   uid: form.uid || '',
         //   patentKey: state.patentKey,

+ 1 - 1
src/utils/model/contextMenu/index.vue

@@ -63,7 +63,7 @@ export default {
     this.$nextTick(()=>{
         window.addEventListener('mousedown',(e)=>{
           var div = this.$refs.myContextMenu
-          if(div.style.display!='none'){
+          if(div && div.style && div.style.display!='none'){
             if (!div.contains(e.target)) {
               this.$store.commit("SET_CONTEXT_MENU", 
                 {

+ 3 - 1
src/views/analyse/custom/components/Tabs/Item.vue

@@ -19,7 +19,7 @@
                 </span>
               </div>
             </template>
-            <div v-for="item in menu.children" :key="item.uid" @click="handleSelect(item.uid)" class="tree-item" :class="{ 'is-active2' : item.uid === form.uid }">
+            <div v-for="item in menu.children" :key="item.uid" @click="handleSelect(item.id)" class="tree-item" :class="{ 'is-active2' : item.uid === form.uid }">
               <div class="custom-title">
                 <span class="label">{{ item.name }}</span>
                 <span class="do">
@@ -45,6 +45,8 @@ export default {
       activeItem2: this.activeItem,
     }
   },
+  watch:{
+  },
   mounted() {
   },
   methods: {

+ 2 - 2
src/views/analyse/custom/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="height_100 custom-analyse">
+  <div class="height_100 custom-analyse" v-if="showPage">
     <el-container>
       <el-aside width="350px">
         <TabItem :active-item="activeItem" :treeList="treeList" @edit="handleEdit" @delete="handleDelete" @select="handleSelect" @handleAdd3="handleAdd3"></TabItem>
@@ -82,6 +82,7 @@ export default {
   props: {},
   data() {
     return {
+      showPage:false,
         enable:[],
         activeItem:[],
         // treeList:[],
@@ -408,7 +409,6 @@ export default {
         var sign = false
         var count = []
         var dimensions = []
-        console.log(this.form)
         if(this.form.schema.x.field && this.form.schema.y.field){
             sign = true
             dimensions = ['x','y']

+ 16 - 15
src/views/home/components/echarts/components/event.vue

@@ -58,22 +58,23 @@ export default {
         }).catch(err => {
           data = []
         })
+      
+        this.scenario.forEach((item,index) => {
+          var obj = data.find(i=>{
+            return i.value == item.id
+          })
+          var event = {}
+          event.name = item.name
+          event.id = item.id
+          if(obj){
+            event.value = obj.count
+          }else{
+            event.value = 0
+          }
+          this.eventData.push(event)
+        });
+        this.initChart()
       }
-      this.scenario.forEach((item,index) => {
-        var obj = data.find(i=>{
-          return i.value == item.id
-        })
-        var event = {}
-        event.name = item.name
-        event.id = item.id
-        if(obj){
-          event.value = obj.count
-        }else{
-          event.value = 0
-        }
-        this.eventData.push(event)
-      });
-      this.initChart()
     },
     initChart() {
       const chartDom = this.$refs.eventEcharts;

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

@@ -68,7 +68,7 @@ export const commonData={
     },
     //获取权限
     getPermissionList(){
-      var code = "e424f3cc4f8138f0f68bef092b92212f,6a8d3f4d1d5f11eda41c00163e2f0200"
+      var code = "e424f3cc4f8138f0f68bef092b92212f;6a8d3f4d1d5f11eda41c00163e2f0200"
       this.$api.getPermissionList({code:code}).then(response=>{
         this.$store.commit('SET_PERMISSION', response.data)
       }).catch(error=>{

+ 23 - 18
src/views/login/compoments/invite/index.vue

@@ -194,28 +194,33 @@ export default {
   },
 };
 </script>
-<style>
+<style lang="scss">
 .agreement {
   border-radius: 10px;
+  .el-dialog__body {
+    padding: 0;
+  }
 }
-.agreement .el-dialog__body {
-  padding: 0;
-}
-.dialogForm .el-form-item__error {
-  display: none;
-}
-.dialogForm .el-dialog__body {
-  padding-top: 10px;
-}
-.dialogForm .el-checkbox__input.is-checked + .el-checkbox__label {
-  color: #606266;
-}
-.content .el-form-item__label {
-  height: 30px;
-  padding: 0;
+.dialogForm {
+  .el-form-item__error{
+    display: none;
+  }
+  .el-dialog__body {
+    padding-top: 10px;
+  }
+  .el-checkbox__input.is-checked + .el-checkbox__label {
+    color: #606266;
+  }
 }
-.content .el-form-item {
-  margin: 0;
+
+.content  {
+  .el-form-item__label {
+    height: 30px;
+    padding: 0;
+  }
+  &>.el-form-item{
+    margin: 0;
+  }
 }
 </style>
 <style lang="scss" scoped>

+ 4 - 0
src/views/product/components/framework/viewIndex.vue

@@ -229,6 +229,10 @@ export default {
     },
     // 预览图片
     commandPackage(row) {
+      if(!row.systemFileList || row.systemFileList.length == 0){
+        this.$message.error('暂无图片可预览')
+        return false
+      }
       this.imgSrc = this.$commonJS.checkViewer(row.systemFileList[0].guid)
       this.showImg = true
     },

+ 6 - 63
src/views/product/components/index.vue

@@ -59,6 +59,7 @@ import categoryTable from './view/categoryTable.vue'
 import addEditCategory from './dialog/addEditCategory.vue'
 import addEditProduct from './dialog/addEditProduct.vue'
 import marketing from './dialog/marketing.vue'
+import fun from './mixins/fun.js'
 export default {
   components: {
     categoryTable,
@@ -66,10 +67,8 @@ export default {
     addEditProduct,
     marketing
   },
+  mixins:[fun],
   props:{
-    patentNo:{
-
-    }
   },
   data() {
     return {
@@ -130,10 +129,7 @@ export default {
       tableData:[],
       //加载
       loading:false,
-      //展示图片
-      showImg:false,
-      //图片地址
-      imgSrc:'',
+      
       //接受子组件消息
       handleMessage:'',
     }
@@ -250,60 +246,11 @@ export default {
           break;
       }
     },
-    /**
-     * 营销数据趋势图
-     * @param {Object} row 
-     * @param {Number} val 
-     */
-     showTrend(row, val) {//val为数据类型,1为产品类别,2为产品
-      const router = this.$router.resolve({
-        path: '/chartIndex',
-        query: {
-          id: row.id,
-          type: val,
-          name: row.name
-        }
-      })
-      window.open(router.href, '_blank');
-    },
+    
 
-     // 进入商品化专利
-    toCommodity(row) {
-      let router = this.$router.resolve({
-        path: '/commodity',
-        query: {
-          productId:row.id,
-          productName:row.name,
-        }
-      })
-      window.open(router.href,'_blank')
-    },
+    
 
-     // 进入产品类别分类架构(与产品架构一致)
-    toFramework(row,val) {
-      var form = {
-        name:row.name,
-        id:row.id,
-        categoryId:row.categoryId,
-        type:val,
-      }
-      let router = this.$router.resolve({
-        path: '/frameworkIndex',
-        query: {
-          row: JSON.stringify(form),
-        }
-      })
-      window.open(router.href, '_blank')
-    },
-    //预览图片
-    checkImage(row){
-      this.imgSrc = this.$commonJS.checkViewer(row.systemFileList[0].guid)
-      this.showImg = true
-    },
-    //关闭预览图片
-    closeViewer(){
-      this.showImg = false
-    },
+   
     //获取删除的id
     deletes(row){
       this.deleteData([row.id])
@@ -359,10 +306,6 @@ export default {
     // 获取产品类别数据
     getList(){
       var str = this.$commonJS.objectToString(this.searchOption)
-      //todo
-      if(this.patentNo){
-
-      }
       let params = {
         ...this.queryParams,//分页信息
         searchQuery:str,//检索条件

+ 69 - 0
src/views/product/components/mixins/fun.js

@@ -0,0 +1,69 @@
+export default {
+    data() {
+        return {
+            //展示图片
+            showImg:false,
+            //图片地址
+            imgSrc:'',
+        }
+    },
+    methods: {
+        // 进入产品类别分类架构(与产品架构一致)
+        toFramework(row,val) {
+            var form = {
+                name:row.name,
+                id:row.id,
+                categoryId:row.categoryId,
+                type:val,
+            }
+            let router = this.$router.resolve({
+                path: '/frameworkIndex',
+                query: {
+                    row: JSON.stringify(form),
+                }
+            })
+            window.open(router.href, '_blank')
+        },
+        /**
+         * 营销数据趋势图
+         * @param {Object} row 
+         * @param {Number} val 
+         */
+        showTrend(row, val) {//val为数据类型,1为产品类别,2为产品
+            const router = this.$router.resolve({
+                path: '/chartIndex',
+                query: {
+                    id: row.id,
+                    type: val,
+                    name: row.name
+                }
+            })
+            window.open(router.href, '_blank');
+        },
+         // 进入商品化专利
+        toCommodity(row) {
+            let router = this.$router.resolve({
+                path: '/commodity',
+                query: {
+                    productId:row.id,
+                    productName:row.name,
+                }
+            })
+            window.open(router.href,'_blank')
+        },
+        
+        //预览图片
+        checkImage(row){
+            if(!row.systemFileList || row.systemFileList.length == 0){
+                this.$message.error('暂无图片可预览')
+                return false
+            }
+            this.imgSrc = this.$commonJS.checkViewer(row.systemFileList[0].guid)
+            this.showImg = true
+        },
+        //关闭预览图片
+        closeViewer(){
+            this.showImg = false
+        },
+    },
+}

+ 5 - 0
src/views/project/patentCollection/components/views/Table.vue

@@ -49,6 +49,11 @@
               </el-link>
             </el-popover>
           </div>
+          <template v-else-if="item.ifPersonal">
+            <div>
+              {{ scope.row.customFields }}
+            </div>
+          </template>
           <template v-else-if="item.value === 'title'">
             <span v-html="getView(scope.row, 'title')"></span>
             <br>

+ 59 - 1
src/views/project/patentCollection/index.vue

@@ -164,7 +164,7 @@
     </el-container>
 
     <Field-Drawer ref="FieldDrawer"></Field-Drawer>
-    <field ref="field" type="patent" @getFieldList="getFieldList"></field>
+    <field ref="field" type="patent" :projectId="projectId" @getFieldList="getFieldList"></field>
     <!-- 报告文档 -->
     <reportFileDrawer ref="reportFileDrawer"></reportFileDrawer>
     <!-- 创建FTO报告 -->
@@ -412,6 +412,58 @@ export default {
       }
       this.getList()
     },
+    //查询专利自定义字段对应的值
+    getPatentFields(){
+      var arr = this.customList.filter(item=>{
+        return item.ifPersonal && !item.ifHidden
+      })
+      if(arr.length == 0){
+        return false
+      }
+      if(this.tableData.length == 0){
+        return false
+      }
+      var patent = this.tableData[0]
+      var customFields = patent.customFields
+      if(customFields){
+        for(var i = 0;i<customFields.length;i++){
+          var index = arr.find(item=>{
+            return item.value == customFields[i].value
+          })
+          if(index != -1){
+            arr.splice(index,1)
+          }
+        }
+      }
+      var patentNos = this.tableData.map(item=>{
+        return item.patentNo
+      })
+      var params = {
+        projectId:this.projectId,
+        patentNos:patentNos,
+        innerFields:arr.map(item=>{
+          return {
+            fieldType:item.type,
+            fieldId:item.value
+          }
+        })
+      }
+      this.$api.getPatentFields(params).then(response=>{
+        if(response.code == 200){
+          var data = response.data.data
+          for(var i = 0;i<data.length;i++){
+            var index = patentNos.findIndex(item=>{
+              return item == data[i].patentNo
+            })
+            if(index){
+              this.$set(this.tableData[index],'customFields',data[i].innerClassFields)
+              patentNos.splice(index,1)
+            }
+          }
+          console.log(this.tableData)
+        }
+      })
+    },
     //获取专利信息
     getList(size) {
       if (size) {
@@ -441,6 +493,7 @@ export default {
             this.commonSwitch()
           }
           this.isRefresh()
+          this.getPatentFields()
         }
       }).catch(error => {
         this.tableData = []
@@ -473,6 +526,7 @@ export default {
     //获取自定义栏位
     getFieldList(data) {
       this.customList = data
+      this.getPatentFields()
     },
     //显示栏位管理
     async handleFieldManage() {
@@ -484,6 +538,10 @@ export default {
     },
     //创建FTO报告
     handleAnalysesFto() {
+      if(!this.$permission.FunPermissions('xiaoshi/report/FTO')){
+        this.$showPermissionDialog()
+        return false
+      }
       var form = {
         reportType: 3,
         signPatentNo: '',

+ 24 - 3
src/views/project/patentDetails/components/patentDetails.vue

@@ -129,6 +129,11 @@ import PatentInstruction from './patentMessage/PatentInstruction.vue'
 import PatentFamily from './patentMessage/PatentFamily.vue'
 import PatentStatus from './patentMessage/PatentStatus.vue'
 import PatentPDF from './patentMessage/PatentPDF.vue'
+import pageProduct from './patentMessage/pageProduct.vue'
+import licenseHistory from './patentMessage/history/licenseHistory.vue'
+import litigationHistory from './patentMessage/history/litigationHistory.vue'
+
+
 import { projectData, handleData } from '../../patentCollection/components/mixins/index'
 
 import PatentField from './PatentField.vue'
@@ -143,6 +148,11 @@ export default {
     PatentFamily,
     PatentStatus,
     PatentPDF,
+    pageProduct,
+    licenseHistory,
+    litigationHistory,
+
+
     PatentField,
     addAndEditReport,
     projectListDialog
@@ -245,12 +255,12 @@ export default {
       ],
       menuList2: [
         {
-          value: 'Permit',
+          value: 'licenseHistory',
           // show: this.$permission('/workspace/patent/worth') ? false : true,
           label: '许可历史'
         },
         {
-          value: 'ProductManage',
+          value: 'pageProduct',
           // show: this.$permission('/workspace/product') ? false : true,
           label: '商品化'
         },
@@ -276,7 +286,7 @@ export default {
           label: '无效证据推荐'
         },
         {
-          value: 'Litigation',
+          value: 'litigationHistory',
           label: '诉讼历史'
         },
         {
@@ -383,6 +393,17 @@ export default {
     },
     // 创建报告:无效分析等点击事件
     handleAnalyse(id) {
+      var permission = {
+        1:'analysisAndOpinion',
+        2:'analysisAndOpinion',
+        4:'tort',
+        5:'avoidDesign',
+        7:'officiallyInvalid'
+      }
+      if(!this.$permission.FunPermissions('xiaoshi/report/'+permission[id])){
+        this.$showPermissionDialog()
+        return false
+      }
       var form = {
         reportType: id,
         signPatentNo: this.patent.patentNo,

+ 102 - 0
src/views/project/patentDetails/components/patentMessage/history/dialog/form.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <el-dialog width="800px" :title="title" :visible.sync="showDialog" :before-close="close">
+        <el-form :model="form" ref="form" label-width="100px" label-position="left">
+            <el-form-item v-for="item in field" :key="item.field" :label="item.label">
+                <component style="width:100%" v-if="item.type == 'text'" :is='item.components' v-model="form[item.field]" :placeholder="`请输入${item.label}`"></component>
+                <component style="width:100%" v-if="item.type == 'number'" :is='item.components' v-model="form[item.field]" :precision="item.precision" :step="item.step" :min="item.min" :max="item.max" :placeholder="`请输入${item.label}`"></component>
+                <component style="width:100%" v-if="item.type == 'date'" :is='item.components' :type="item.type" value-format="yyyy-MM-dd" v-model="form[item.field]" :placeholder="`请选择${item.label}`"></component>
+                <component style="width:100%" v-if="item.type == 'select'" :is='item.components' v-model="form[item.field]" :placeholder="`请选择${item.label}`" >
+                    <el-option
+                        v-for="option in item.options"
+                        :key="option.value"
+                        :label="option.label"
+                        :value="option.value">
+                    </el-option>
+                </component>
+                <component style="width:100%" v-if="item.type == 'upload'" :is='item.components' :file-list="form.systemFileList" @on-change="onchangeFile" @on-remove="onRemove" :autoUpload="true"></component>
+            </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="submitForm()" size="small" style="width:100px" :loading="btnLoading">保存</el-button>
+            <el-button  @click="close()" size="small" style="width:100px">取消</el-button>
+        </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+        title:'',
+        showDialog:false,
+        field:[],
+        form:{},
+        btnLoading:false
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    open(field,form,title){
+        this.field = field
+        this.form = JSON.parse(JSON.stringify(form))
+        this.title = title
+        this.showDialog = true
+    },
+    close(){
+        this.showDialog = false
+    },
+    submitForm(){
+        this.$refs.form.validate((valid) => {
+            if (valid) {
+                if(this.form.systemFile && this.form.systemFile.length>0){
+                    // 判断文件是否都上传完毕
+                    var guids = this.$commonJS.checkUploadFile(this.form.systemFile)
+                    if(!guids){
+                        return false
+                    }
+                    this.form.fileGuids = guids
+                }
+                this.$emit('save',this.form)
+            }
+        })
+    },
+    changeBtnLoading(val){
+        this.btnLoading = val
+    },
+     // 上传的文件监听
+     onchangeFile(file, fileList) {
+      if(!this.form.systemFileList){
+        this.$set(this.form,'systemFileList',[])
+      }
+      if (file.guid) {
+        let index = this.form.systemFileList.findIndex(item => {
+          return item.uid == file.uid
+        })
+        if (index != -1) {
+          this.form.systemFileList.splice(index, 1, file)
+        }
+      } else {
+        this.form.systemFileList.push(file.raw)
+      }
+    },
+    // 删除上传的文件
+    onRemove(file, fileList) {
+      let index = this.form.systemFileList.findIndex(item => {
+        return item.uid == file.uid
+      })
+      if (index != -1) {
+        this.form.systemFileList.splice(index, 1)
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 229 - 0
src/views/project/patentDetails/components/patentMessage/history/licenseHistory.vue

@@ -0,0 +1,229 @@
+<template>
+    <!-- 许可历史 -->
+  <div class="height_100">
+    <el-container>
+        <el-header>
+            <div class="head">
+                <el-button size="small" @click="add">添加</el-button>
+            </div>
+        </el-header>
+        <el-main>
+            <el-table :data="tableData" v-loading="loading" border style="width: 100%">
+                <el-table-column label="许可人" prop="licensor" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.licensor}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="被许可人" prop="licensee" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.licensee}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="被许可人国家" prop="licenseeCountry" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.licenseeCountry}}</span>
+                    </template>
+            </el-table-column>
+            <el-table-column label="许可时间" prop="licenseTime" align="center">
+                <template slot-scope="scope">
+                    <span>{{scope.row.licenseTime? scope.row.licenseTime.slice(0,10):'' }}</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="截止时间" prop="licenseDeadLine" align="center">
+                <template slot-scope="scope">
+                    <span>{{scope.row.licenseDeadLine? scope.row.licenseDeadLine.slice(0,10):'' }}</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="许可费用/万元" prop="licenseFee" align="center">
+                <template slot-scope="scope">
+                    <span>{{scope.row.licenseFee}}</span>
+                </template>
+            </el-table-column>
+                <el-table-column label="许可类型" prop="licenseType" align="center">
+                    <template slot-scope="scope">
+                        <span>{{permitTypeList[scope.row.licenseType]}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" width="160" align="center">
+                    <template slot-scope="scope">
+                        <div class="special">
+                            <el-button type="text" size="small" @click="edit(scope.row)">编辑</el-button>
+                            <el-button type="text" size="small" @click="del(scope.row)">删除</el-button>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-main>
+        <el-footer class="pagination">
+            <el-pagination  background layout="total,prev,sizes, pager, next,jumper" :total="total" @current-change="handleCurrentChange" :current-page="queryParams.current" :page-size="queryParams.size"></el-pagination>
+        </el-footer>
+    </el-container>
+    <addMessage ref="addMessage" @save="save"></addMessage>
+  </div>
+</template>
+
+<script>
+import mixins from './mixins/index';
+export default {
+    mixins:[mixins],
+    components: {},
+    props: {},
+    data() {
+        return {
+            field:[
+                {
+                    field:'licensor',
+                    label:'许可人',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'licensee',
+                    label:'被许可人',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'licenseeCountry',
+                    label:'被许可人国家',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'licenseTime',
+                    label:'许可时间',
+                    components:'el-date-picker',
+                    type:'date'
+                },
+                {
+                    field:'licenseDeadLine',
+                    label:'截止时间',
+                    components:'el-date-picker',
+                    type:'date'
+                },
+                {
+                    field:'licenseFee',
+                    label:'许可费用(万元)',
+                    components:'el-input-number',
+                    type:'number',
+                    min:0,
+                    max:1,
+                    precision:1,
+                    step:0.1
+                },
+                {
+                    field:'licenseType',
+                    label:'许可类型',
+                    components:'el-select',
+                    type:'select',
+                    options:[
+                        {
+                            label:'独占许可',
+                            value:'1'
+                        },
+                        {
+                            label:'普通许可',
+                            value:'2'
+                        },
+                        {
+                            label:'排他许可',
+                            value:'3'
+                        },
+                    ]
+                },
+            ],
+            permitTypeList:{
+                '1':'独占许可',
+                '2':'普通许可',
+                '3':'排他许可'
+            }
+        };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {},
+    methods: {
+        getList(){
+            this.loading = true
+            this.$api.queryPermissionRecord(this.queryParams).then(response=>{
+                if(response.code == 200){
+                    this.tableData = response.data.data
+                    this.total = response.data.total
+                    this.loading = false
+                }
+            }).catch(error=>{
+                this.tableData = []
+                this.total = 0
+                this.loading = false
+            })
+        },
+        add(){
+            var licensor = ''
+            if(this.patent.rightHolder && this.patent.rightHolder.length>0){
+                licensor = this.patent.rightHolder[0]
+            }
+            var form = {
+                licensor:licensor
+            }
+            var title = '添加许可历史'
+            this.$refs.addMessage.open(this.field,form,title)
+        },
+        edit(row){
+            var title = '编辑许可历史'
+            this.$refs.addMessage.open(this.field,row,title)
+        },
+        del(row){
+            this.deletes([row.id])
+        },
+        deletes(ids){
+            this.$confirm('是否删除', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$api.deletePermissionRecord(ids).then(response=>{
+                    if(response.code == 200){
+                        this.$message.success('删除成功')
+                        this.getList()
+                    }
+                }).catch(error=>{
+
+                })
+            })
+        },
+        save(val){
+            this.$refs.addMessage.changeBtnLoading(true)
+            var form = {
+                ...val,
+                patentNo:this.patent.patentNo
+            }
+            var a = ''
+            if(form.id){
+                a='编辑'
+            }else{
+                a='添加'
+            }
+            this.$api.addPermissionRecord(form).then(response=>{
+                if(response.code == 200){
+                    this.$message.success(a+'成功')
+                    this.$refs.addMessage.changeBtnLoading(false)
+                    this.$refs.addMessage.close()
+                    this.getList()
+                }
+            }).catch(error=>{
+                this.$message.error(a+'失败')
+                this.$refs.addMessage.changeBtnLoading(false)
+            })
+        },
+        
+    },
+};
+</script>
+<style lang="scss" scoped>
+.head{
+    width: 100%;
+    display: flex;
+    justify-content: flex-end;
+}
+</style>

+ 239 - 0
src/views/project/patentDetails/components/patentMessage/history/litigationHistory.vue

@@ -0,0 +1,239 @@
+<template>
+    <!-- 许可历史 -->
+  <div class="height_100">
+    <el-container>
+        <el-header>
+            <div class="head">
+                <el-button size="small" @click="add">添加</el-button>
+            </div>
+        </el-header>
+        <el-main>
+            <el-table :data="tableData" v-loading="loading" border style="width: 100%">
+                <el-table-column type="expand">
+                    <template slot-scope="scope">
+                        <el-form label-position="left"  class="demo-table-expand" style="padding:0 30px">
+                            <el-form-item label="案件详情:">
+                                <span v-if="scope.row.vVisible">{{scope.row.caseDetails}}</span>
+                                <el-input type="textarea" v-else v-model="scope.row.caseDetails"></el-input>
+                            </el-form-item>
+                        </el-form>
+                    </template>
+                </el-table-column>
+                <el-table-column label="原告" prop="plaintiff" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.plaintiff}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="被告" prop="defendant" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.defendant}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="案由" prop="causeOfAction" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.causeOfAction}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="受理法院" prop="court" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.court}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="起诉时间" prop="indictTime"  align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.indictTime}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="审理结果" prop="result" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.result}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="备注" prop="remark" align="center">
+                    <template slot-scope="scope">
+                        <span>{{scope.row.remark}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="附件" prop="reportFiles" align="center">
+                    <template slot-scope="scope">
+                        <span>
+                          <span v-if="scope.row.reportFiles">
+                            <div v-for="item in scope.row.reportFiles" style="margin:0;display:flex;justify-content:space-around;align-items:center;">
+                              <p style="margin:0;width:calc(100% - 40px);overflow: hidden;white-space: nowrap;text-overflow:ellipsis;cursor: pointer">{{item.name?item.name+'.'+item.suffix:item.fileName}}</p> 
+                              <Menu :data="item" @delFile="delFile1(scope.row,item.id,scope.$index)"></Menu>
+                            </div>
+                            </span>
+                             <span v-else><i class="el-icon-minus"></i></span>
+                        </span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" width="160" align="center">
+                    <template slot-scope="scope">
+                        <div class="special">
+                            <el-button type="text" size="small" @click="edit(scope.row)">编辑</el-button>
+                            <el-button type="text" size="small" @click="del(scope.row)">删除</el-button>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-main>
+        <el-footer class="pagination">
+            <el-pagination  background layout="total,prev,sizes, pager, next,jumper" :total="total" @current-change="handleCurrentChange" :current-page="queryParams.current" :page-size="queryParams.size"></el-pagination>
+        </el-footer>
+    </el-container>
+    <addMessage ref="addMessage" @save="save"></addMessage>
+  </div>
+</template>
+
+<script>
+import mixins from './mixins/index';
+export default {
+    mixins:[mixins],
+    components: {},
+    props: {},
+    data() {
+        return {
+            field:[
+                {
+                    field:'plaintiff',
+                    label:'原告',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'defendant',
+                    label:'被告',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'causeOfAction',
+                    label:'案由',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'court',
+                    label:'受理法院',
+                    components:'el-input',
+                    type:'text'
+                },
+                {
+                    field:'indictTime',
+                    label:'起诉时间',
+                    components:'el-date-picker',
+                    type:'date'
+                },
+                {
+                    field:'result',
+                    label:'审理结果',
+                    components:'el-input',
+                    type:'text',
+                },
+                {
+                    field:'caseDetails',
+                    label:'案件详情',
+                    components:'el-input',
+                    type:'text',
+                },
+                {
+                    field:'fileGuids',
+                    label:'附件',
+                    components:'myUpload',
+                    type:'upload',
+                },
+                {
+                    field:'remark',
+                    label:'备注',
+                    components:'el-input',
+                    type:'text',
+                },
+            ],
+
+        };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {},
+    methods: {
+        getList(){
+            this.loading = true
+            this.$api.queryLitigationHistory(this.queryParams).then(response=>{
+                if(response.code == 200){
+                    this.tableData = response.data.data
+                    this.total = response.data.total
+                    this.loading = false
+                }
+            }).catch(error=>{
+                this.tableData = []
+                this.total = 0
+                this.loading = false
+            })
+        },
+        add(){
+
+            var form = {
+                
+            }
+            var title = '添加诉讼历史'
+            this.$refs.addMessage.open(this.field,form,title)
+        },
+        edit(row){
+            var title = '编辑诉讼历史'
+            this.$refs.addMessage.open(this.field,row,title)
+        },
+        del(row){
+            this.deletes([row.id])
+        },
+        deletes(ids){
+            this.$confirm('是否删除', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                this.$api.deleteLitigationHistory(ids).then(response=>{
+                    if(response.code == 200){
+                        this.$message.success('删除成功')
+                        this.getList()
+                    }
+                }).catch(error=>{
+
+                })
+            })
+        },
+        save(val){
+            this.$refs.addMessage.changeBtnLoading(true)
+            var form = {
+                ...val,
+                patentNo:this.patent.patentNo
+            }
+            var a = ''
+            if(form.id){
+                a='编辑'
+            }else{
+                a='添加'
+            }
+            this.$api.addLitigationHistory(form).then(response=>{
+                if(response.code == 200){
+                    this.$message.success(a+'成功')
+                    this.$refs.addMessage.changeBtnLoading(false)
+                    this.$refs.addMessage.close()
+                    this.getList()
+                }
+            }).catch(error=>{
+                this.$message.error(a+'失败')
+                this.$refs.addMessage.changeBtnLoading(false)
+            })
+        },
+        
+    },
+};
+</script>
+<style lang="scss" scoped>
+.head{
+    width: 100%;
+    display: flex;
+    justify-content: flex-end;
+}
+</style>

+ 38 - 0
src/views/project/patentDetails/components/patentMessage/history/mixins/index.js

@@ -0,0 +1,38 @@
+import addMessage from '../dialog/form.vue'
+export default{
+    components:{
+        addMessage
+    },
+    props:{
+        patent:{
+            default:{}
+        }
+    },
+    data() {
+        return {
+            tableData:[],
+            queryParams:{
+                patentNo:this.patent.patentNo,
+                current:1,
+                size:10
+            },
+            total:0,
+            loading:false
+        }
+    },
+    watch:{
+        patent(val){
+            this.queryParams.patentNo = val.patentNo
+            this.getList()
+        }
+    },
+    mounted() {
+        this.getList()
+    },
+    methods: {
+        handleCurrentChange(val){
+            this.queryParams.current = val
+            this.getList()
+        }
+    },
+}

+ 220 - 0
src/views/project/patentDetails/components/patentMessage/pageProduct.vue

@@ -0,0 +1,220 @@
+<template>
+  <div class="height_100">
+    <el-container>
+        <el-header>
+            <div id="step1">
+                <mySearch style="width: 500px" :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
+            </div>
+        </el-header>
+        <el-main v-DivHeight="getDivHeight">
+            <el-table :data="data" header-row-class-name="custom-table-header"  v-if="showTable" :maxHeight="tableHeight" @sort-change="sortChange" border>
+                <el-table-column label="#" width="60" type="index" align="center">
+                    <template slot-scope="scope">
+                    <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+                    </template>
+                </el-table-column>
+
+                <el-table-column v-for="item in column" :render-header="$commonJS.renderHeaderMethods" :key="item.value" :prop="item.value" :label="item.name" align="center" sortable="custom">
+                    <template slot-scope="scope">
+                    <div v-if="['name'].includes(item.value)">
+                        <el-link @click="handleItem(scope.row, '2')" type="primary">
+                        <span  v-html="$commonJS.getColumnData(scope.row, item)"></span>
+                        </el-link>
+                    </div>
+                    <div v-else v-html="$commonJS.getColumnData(scope.row, item)">
+                    </div>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center" width="150px">
+                    <template slot-scope="scope">
+                    <el-dropdown split-button type="primary" size="small" @click="handleCommand('0', scope.row)"
+                        @command="handleCommand($event, scope.row)">
+                        <span>编 辑</span>
+                        <el-dropdown-menu slot="dropdown" style="text-align:center">
+                        <el-dropdown-item command="1">预览图片</el-dropdown-item>
+                        <el-dropdown-item command="2">产品架构</el-dropdown-item>
+                        <el-dropdown-item command="3">产品的营销数据</el-dropdown-item>
+                        <el-dropdown-item command="4">营销数据的趋势图</el-dropdown-item>
+                        <el-dropdown-item command="5">专利布局可视化</el-dropdown-item>
+                        <el-dropdown-item command="6">商品化专利</el-dropdown-item>
+                        <el-dropdown-item command="7" divided style="color:red">删 除</el-dropdown-item>
+                        </el-dropdown-menu>
+                    </el-dropdown>
+                    </template>
+                </el-table-column>
+                </el-table>
+        </el-main>
+        <el-footer class="pagination">
+            <el-pagination background layout="total,sizes, prev, pager, next, jumper" :current-page.sync="queryParams.current" :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="total">
+            </el-pagination>
+        </el-footer>
+    </el-container>
+    <marketing ref="marketing"></marketing>
+    <addEditProduct ref="addEditProduct" @getMessage="getList"></addEditProduct>
+    <myImageViewer v-if="showImg" :on-close="closeViewer" :src="imgSrc"></myImageViewer>
+  </div>
+</template>
+
+<script>
+import { getTableHeight } from '@/views/components/mixins'
+import mixins from '@/views/product/components/mixins/index'
+import fun from '@/views/product/components/mixins/fun'
+import product from '@/views/product/components/mixins/product'
+
+import marketing from '@/views/product/components/dialog/marketing.vue'
+import addEditProduct from '@/views/product/components/dialog/addEditProduct.vue'
+export default {
+  components: {
+    marketing,
+    addEditProduct
+  },
+  props: {
+    patentNo:{}
+  },
+  mixins:[getTableHeight,mixins,fun,product],
+  data() {
+    return {
+        showTable:true,
+        column:[
+          {
+            value:'name',
+            type:'String',
+            name:'类别名称'
+          },
+          {
+            value:'marketTime',
+            type:'DateTime',
+            name:'上市时间'
+          },
+          {
+            value:'companyName',
+            type:'String',
+            name:'所属公司'
+          },
+          {
+            value:'licenseRate',
+            type:'String',
+            name:'许可费率'
+          },
+          {
+            value:'description',
+            type:'String',
+            name:'产品说明'
+          },
+          {
+            value:'createName',
+            type:'String',
+            name:'创建人'
+          },
+          {
+            value:'createTime',
+            type:'DataTime',
+            name:'创建时间'
+          },
+        ],
+        searchFiled:[],
+        //检索条件
+        searchOption: {},
+        queryParams:{
+            size:10,
+            current:1
+        },
+        total:0,
+        tableData:[],
+        // 排序数组
+        sort: [
+            {
+            "orderBy": "createTime",
+            "orderType": 1
+            }
+        ],
+    };
+  },
+  watch: {
+    patentNo(){
+        this.getList()
+    }
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    //获取检索条件检索
+    search(val) {
+        let params = {}
+        if(val.length>0){
+            val.forEach(item => {
+                if (item.type == 3) {
+                    params[item.value]=item.searchValue.map(itemValue => {
+                    return itemValue.value
+                    })
+                } else {
+                    params[item.value]=item.searchValue.label
+                }
+            })
+        }
+        this.searchOption = this.$commonJS.ArrayToArray(val)
+        this.queryParams.current = 1
+        this.getList()
+    },
+    getList(){
+
+    },
+    handleCurrentChange(val){
+        this.queryParams.current = val
+        this.getList()
+    },
+    async handleCommand( option, row ){
+        if(!(await this.$permission.producePermission(row.id,2))){
+            this.$showPermissionDialog()
+            return false
+        }
+        switch (option) {
+            case '0'://编辑
+                this.$refs.addEditProduct.open(row)
+            break;
+            case '1'://预览图片
+                this.checkImage(row)
+            break;
+            case '2'://产品架构
+                this.toFramework(row,2)
+            break;
+            case '3'://产品的营销数据
+                this.$refs.marketing.open(row)
+            break;
+            case '4'://产品的营销数据趋势图
+                this.showTrend(row,2)
+            break;
+            case '5'://专利布局可视化
+
+            break;
+            case '6'://商品化专利
+                this.toCommodity(row)
+            break;
+            case '7'://删除产品
+                this.deletes(row)
+            break;
+            
+            default:
+            break;
+        }
+    },
+    // 排序方法
+    sortChange({ column, prop, order }) {
+      //如需要多个字段排序,则不需要清空
+      var params = {
+        sort:this.sort,
+        column,
+        prop,
+        order,
+      }
+      this.sort = this.$commonJS.getSortData(params)
+      this.getList()
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

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

@@ -18,14 +18,16 @@
         <el-button type="primary" size="small" @click="editContent" class="margin-right_10">{{edit?'完成':'编辑'}}</el-button>
     </div>
     <div class="content" v-if="content.proofGroupMessage">
-        <template v-if="['5','4','8'].indexOf(row.statutesId) ==-1">
+        <template>
             <div >
                 <div class="left">
-                    权要
+                    权要/说明书/附图
                 </div>
                 <div class="right">
                     <div>
-                        <span v-html="row.claimText"> </span>
+                        <span v-if="row.relatedContent == 1" v-html="row.claimText"> </span>
+                        <span v-else-if="row.relatedContent == 0">说明书</span>
+                        <span v-else>附图</span>
                     </div>
                 </div>
             </div>
@@ -1282,10 +1284,10 @@ export default {
         this.getData()
     },
     updateData(field,val,type,row,num){
-        var arr = ['ifPresentOpinions1','ifPresentOpinions2','rbSummary']
-        var types = 5
+        var arr = ['evidenceText','ifPresentOpinions1','ifPresentOpinions2','rbSummary','rbDecision','courtDecision1','courtDecision1']
+        var types = [5,1]
         var ifGroup = ['2','3','4','8'].indexOf(this.row.statutesId) !=-1
-        if(arr.indexOf(field)!=-1 && type == types){
+        if(arr.indexOf(field)!=-1 && types.includes(type)){
             this.$emit('update',field,val,row,num,ifGroup)
         }
     },
@@ -1306,7 +1308,7 @@ export default {
             if(response.code == 200){
                 this.$message.success('编辑成功')
                 this.$forceUpdate()
-                this.updateData(field,value,1)
+                this.updateData(field,val,1,this.row)
             }
         }).catch(error=>{
             // this.$message.error('编辑失败')
@@ -1474,7 +1476,7 @@ export default {
 
 .details{
     position: relative;
-    --left:120px;
+    --left:140px;
     --border:1px solid black;
     --padding:10px;
     padding:15px;

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

@@ -78,6 +78,7 @@
                                         <i slot="reference" class="el-icon-caret-bottom"></i>
                                     </el-popover>
                                 </span>
+                                
                         </div>
                         <div v-else>
                             <div v-if="scope.row.featureText">
@@ -94,6 +95,7 @@
                                     <span v-else class="cursor_pointer" @click="checkEvidenceDetails(item)">D{{ item.sysOrder }}</span>
                                     <span v-if="index < scope.row.literatures.length-1"> + </span>
                             </span>
+                            <span v-if="['4','8'].indexOf(scope.row.statutesId) !=-1" v-html="getImageHTML(scope.row.evidenceText)"></span>
                         </div>
                         <div v-else>
                             <span v-html="getEvidenceDescription(scope.row,1)"></span>
@@ -138,6 +140,7 @@
                                             <span v-else class="cursor_pointer" @click="checkEvidenceDetails(item)">D{{ item.sysOrder }}</span>
                                             <span v-if="index < scope.row.secondLiteratures.length-1"> + </span>
                                     </span>
+                                    <span v-if="['4','8'].indexOf(scope.row.statutesId) !=-1" v-html="getImageHTML(scope.row.secondEvidenceText)"></span>
                                 </div>
                                 <div v-else>
                                     <span v-html="getEvidenceDescription(scope.row,2)"></span>
@@ -260,7 +263,7 @@ export default {
     },
     reportType:{
         default:0
-    }
+    },
   },
   data() {
     return {
@@ -287,6 +290,14 @@ export default {
     this.getClaims()
   },
   methods: {
+    getImageHTML(text){
+        if(!text){
+            return ''
+        }
+        let imgReg = /<img.*?(?:>|\/>)/gi //匹配图片中的img标签
+        let arr = text.match(imgReg)  //筛选出所有的img
+        return arr.join('')
+    },
     updateMessage(val){
         if(val){
             if(val == 'claim'){
@@ -416,6 +427,14 @@ export default {
     },
     //更新数据
     updateData(field,val,row,num,ifGroup){
+        if(['rbDecision','courtDecision1','courtDecision1'].includes(field)){
+            var claimId = row.claimId
+            var index = this.tableData.findIndex(item=>{
+                return item.claimId == claimId
+            })
+            this.tableData[index][field] = val
+            return false
+        }
         if(!ifGroup){
             var featureGroupId = row.featureGroupId
             var index = this.tableData.findIndex(item=>{
@@ -445,10 +464,16 @@ export default {
                     if(field == 'ifPresentOpinions1'){
                         this.tableData[index].secondErIfPresentOpinions1 = val
                     }
+                    if(field == 'evidenceText'){
+                        this.tableData[index].secondEvidenceText = val
+                    }
                 }else{
                     if(field == 'ifPresentOpinions1'){
                         this.tableData[index].erIfPresentOpinions1 = val
                     }
+                    if(field == 'evidenceText'){
+                        this.tableData[index].evidenceText = val
+                    }
                 }
             }
         

+ 1 - 1
src/views/report/components/details/index.vue

@@ -13,7 +13,7 @@
         </el-menu>
       </el-aside>
       <el-main>
-        <component :is='componentName' :projectId="projectId" :patentNo="patentNo" :reportType="reportType" :ifSecondInvalid="reportMessage.ifSecondInvalid" @refreshData="getReportMessage"></component>
+        <component :is='componentName' :projectId="projectId" :patentNo="patentNo" :reportType="reportType" :patentType="reportMessage.patentType" :ifSecondInvalid="reportMessage.ifSecondInvalid" @refreshData="getReportMessage"></component>
       </el-main>
     </el-container>
 

+ 13 - 2
src/views/report/components/index.vue

@@ -43,8 +43,7 @@
       </el-main>
       <el-footer class="pagination" v-if="viewType != 'visual'">
         <el-pagination background layout="total,sizes, prev, pager, next, jumper" :current-page.sync="queryParams.current"
-          :page-sizes="pageSize" :page-size.sync="queryParams.size" @current-change="handleCurrentChange"
-          :handleMessage="handleMessage" @size-change="handleSizeChange" :total="total">
+          :page-sizes="pageSize" :page-size.sync="queryParams.size" @current-change="handleCurrentChange" @size-change="handleSizeChange" :total="total">
         </el-pagination>
       </el-footer>
     </el-container>
@@ -475,6 +474,18 @@ export default {
     },
     //打开创建报告弹窗
     handleAnalyse(id) {
+      var permission = {
+        1:'analysisAndOpinion',
+        2:'analysisAndOpinion',
+        3:'FTO',
+        4:'tort',
+        5:'avoidDesign',
+        7:'officiallyInvalid'
+      }
+      if(!this.$permission.FunPermissions('xiaoshi/report/'+permission[id])){
+        this.$showPermissionDialog()
+        return false
+      }
       var form = {
         reportType: id,
         eventId: this.eventId,

+ 12 - 0
src/views/report/components/productResult/productResult.vue

@@ -277,6 +277,18 @@ export default {
     },
     // 创建报告
     handleAnalyse(val) {
+      var permission = {
+        1:'analysisAndOpinion',
+        2:'analysisAndOpinion',
+        3:'FTO',
+        4:'tort',
+        5:'avoidDesign',
+        7:'officiallyInvalid'
+      }
+      if(!this.$permission.FunPermissions('xiaoshi/report/'+permission[val])){
+        this.$showPermissionDialog()
+        return false
+      }
       var form = {
         reportType: val,
         signPatentNo: this.patentNo,