ソースを参照

检索历史以及商品化专利

zhuliu 1 年間 前
コミット
bb6658edb0

+ 5 - 1
src/assets/css/main.scss

@@ -169,7 +169,11 @@
     width: 0px;
   }
 }
-
+.el-tree-node__content{
+  .el-checkbox{
+    width: auto;
+  }
+}
 
 .disabled{
   cursor:not-allowed !important;

+ 22 - 10
src/router/index.js

@@ -95,6 +95,16 @@ const routes = [
             },
             component: () => import('@/views/project/patentCollection/components/export/index.vue'),
           },
+          // 专利数据库导出专利
+          {
+            path: "/patentWorth",
+            name: 'patentWorth',
+            meta: {
+              title: '价值曲线',
+              sign: 'patentWorth'
+            },
+            component: () => import('@/views/project/patentDetails/components/patentMessage/history/echarts/index.vue'),
+          },
         ],
       },
       //企业专利数据库
@@ -190,7 +200,8 @@ const routes = [
             path: "/mindIndex",
             meta: {
               title: '可视化',
-              button: [],
+              sign: 'mindIndex',
+              belong: 'Product'
             },
             component: () => import('@/views/product/components/jsMind'),
           },
@@ -482,6 +493,16 @@ const routes = [
         },
         component: () => import('@/views/components/import/conditionImport'),
       },
+      //检索历史
+      {
+        path: "/searchHistory",
+        name:'searchHistory',
+        meta: {
+          title: '检索历史',
+          sign:'searchHistory'
+        },
+        component: () => import('@/views/components/import/conditionImport/components/search_history.vue'),
+      },
       //检索结果
       {
         path: "/searchResult",
@@ -491,15 +512,6 @@ const routes = [
         },
         component: () => import('@/views/components/import/conditionImport/searchResultIndex.vue'),
       },
-      // //检索专利详情
-      // {
-      //   path: "/search/patentDetail",
-      //   meta: {
-      //     title: '专利详情',
-      //     // button: [],
-      //   },
-      //   component: () => import('@/views/components/import/conditionImport/patentDetails/patentIndex.vue'),
-      // },
       // 任务清单
       {
         path: "/taskList",

+ 27 - 0
src/utils/common.js

@@ -76,6 +76,33 @@ export default {
     })
     return arr
   },
+
+  /**
+   * 获取uuid
+   * @param {*} len 长度
+   * @param {*} radix 进制
+   * @returns 
+   */
+  uuid(len, radix) {
+    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
+    var uuid = [], i;
+    radix = radix || chars.length;
+    if (len) {
+      for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
+    } else {
+      var r;
+      uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
+      uuid[14] = '4';
+      for (i = 0; i < 36; i++) {
+        if (!uuid[i]) {
+          r = 0 | Math.random()*16;
+          uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
+        }
+      }
+    }
+    return uuid.join('');
+  },
+
   //object转字符串
   objectToString(val) {
     var data = []

+ 1 - 1
src/views/components/dialog/nodeCopy.vue

@@ -63,7 +63,7 @@
                                 </el-table-column>
                                 <el-table-column
                                     prop="name"
-                                    label="名">
+                                    label="名">
                                 </el-table-column>
                             </el-table>
                         </el-main>

+ 84 - 71
src/views/components/import/conditionImport/components/search_history.vue

@@ -1,75 +1,87 @@
 <template>
-  <div style="background:white;padding:20px 20px 0;">
-    <el-button @click="deletes()"><i class="iconfont icon-shanchu"></i> 删除<span v-if="multipleSelection.length>0">{{ multipleSelection.length }}条</span><span v-else>所有</span>检索记录</el-button>
-    <el-divider></el-divider>
-    <el-table
-      ref="table"
-      :data="tableData"
-      style="width: 100%"
-      :maxHeight="height - 230"
-      v-loading="loading"
-      :row-key="getRowKeys"
-      @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" :reserve-selection="true">
+  <div class="height_100">
+    <el-container>
+      <el-main v-DivHeight="getDivHeight">
+        <el-table
+          ref="table"
+          :data="tableData"
+          style="width: 100%"
+          v-loading="loading"
+          :row-key="getRowKeys"
+          @selection-change="handleSelectionChange"
+          :maxHeight="tableHeight">
+          <el-table-column type="selection" width="55" :reserve-selection="true">
+
+          </el-table-column>
+          <el-table-column prop="conditions" label="检索式"></el-table-column>
+          <el-table-column prop="dbType" label="检索范围" width="140">
+            <template slot-scope="scope">
+              <div>
+                {{ dbType[scope.row.dbType] }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="time" label="创建/更新时间" width="240">
+            <template slot-scope="scope">
+              <div class="time">
+                <p>创建:{{ scope.row.retrieveTime }}</p>
+                <p>更新:{{ scope.row.updateTime }}</p>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column prop="totalNum" label="检索结果" width="120">
+            <template slot-scope="scope">
+              <div>
+                {{ scope.row.totalNum }}件
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="140">
+            <template slot-scope="scope">
+                <div class="icon">
+                    <span @click="editSearch(scope.row)" class="margin-left_10">
+                      <el-tooltip class="item" effect="dark" content="编辑" placement="top">
+                        <i class="iconfont icon-bianji"></i>
+                      </el-tooltip>
+                    </span>
+                    <span @click="executeSearch(scope.row)" class="margin-left_10">
+                      <el-tooltip class="item" effect="dark" content="再次执行" placement="top">
+                        <i class="iconfont icon-zidongzhihang"></i>
+                      </el-tooltip>
+                    </span>
+                    <span @click="delSearch(scope.row)" class="margin-left_10">
+                      <el-tooltip class="item" effect="dark" content="删除" placement="top">
+                        <i class="iconfont icon-shanchu"></i>
+                      </el-tooltip>
+                    </span>
+                </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-main>
+      <el-footer style="display:flex;justify-content:space-between;align-items:center">
+        <div>
+          <el-button size="small" @click="deletes()">
+            <i class="iconfont icon-shanchu"></i>删除<span v-if="multipleSelection.length>0">{{ multipleSelection.length }}条</span>
+            <span v-else>所有</span>检索记录
+          </el-button>
+        </div>
+        <div>
+          <el-pagination
+            background
+            layout="total, prev, pager, next, jumper"
+            :current-page.sync="queryParams.current"
+            :page-size.sync="queryParams.size"
+            @current-change="handleCurrentChange"
+            @size-change="getList"
+            :total="queryParams.total"
+          >
+          </el-pagination>
+        </div>
+        
+      </el-footer>
+    </el-container>
 
-      </el-table-column>
-      <el-table-column prop="conditions" label="检索式"></el-table-column>
-      <el-table-column prop="dbType" label="检索范围" width="140">
-        <template slot-scope="scope">
-          <div>
-            {{ dbType[scope.row.dbType] }}
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column prop="time" label="创建/更新时间" width="240">
-        <template slot-scope="scope">
-          <div class="time">
-            <p>创建:{{ scope.row.retrieveTime }}</p>
-            <p>更新:{{ scope.row.updateTime }}</p>
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column prop="totalNum" label="检索结果" width="120">
-        <template slot-scope="scope">
-          <div>
-            {{ scope.row.totalNum }}件
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" width="140">
-        <template slot-scope="scope">
-            <div class="icon">
-                <span @click="editSearch(scope.row)" class="margin-left_10">
-                  <el-tooltip class="item" effect="dark" content="编辑" placement="top">
-                    <i class="iconfont icon-bianji"></i>
-                  </el-tooltip>
-                </span>
-                <span @click="executeSearch(scope.row)" class="margin-left_10">
-                  <el-tooltip class="item" effect="dark" content="再次执行" placement="top">
-                    <i class="iconfont icon-zidongzhihang"></i>
-                  </el-tooltip>
-                </span>
-                <span @click="delSearch(scope.row)" class="margin-left_10">
-                  <el-tooltip class="item" effect="dark" content="删除" placement="top">
-                    <i class="iconfont icon-shanchu"></i>
-                  </el-tooltip>
-                </span>
-            </div>
-        </template>
-      </el-table-column>
-    </el-table>
-<div class="foot">
-  <el-pagination
-          background
-          layout="total, prev, pager, next, jumper"
-          :current-page.sync="queryParams.current"
-          :page-size.sync="queryParams.size"
-          @current-change="handleCurrentChange"
-          @size-change="getList"
-          :total="queryParams.total"
-        >
-        </el-pagination>
-</div>
     <el-dialog title="编辑检索式" :visible.sync="dialogVisible" width="800px" :before-close="handleClose" :close-on-click-modal="false" append-to-body>
       <div>
         <el-form :model="form" label-width="120px" size="small" label-position="right">
@@ -93,12 +105,13 @@
 </template>
 
 <script>
+import { getTableHeight } from '@/views/components/mixins'
 export default {
+  mixins: [getTableHeight],
   components: {},
   props:['importData'],
   data() {
     return {
-      height:document.documentElement.clientHeight,
         tableData:[],
         multipleSelection:[],
         loading:false,

+ 4 - 1
src/views/product/components/commodity/commodity.vue

@@ -165,8 +165,11 @@ export default {
   methods: {
     // 点击专利号进行跳转
     handleClick(row, location) {
+      var searchOption = {
+        searchOption: this.searchStr
+      }
       var search = {
-        searchOption: this.searchOption,
+        searchOption: searchOption,
         location: location,
       }
       this.$s.setSession('search', search)

+ 6 - 5
src/views/product/components/jsMind/components/mind.vue

@@ -270,8 +270,8 @@ export default {
                   </div>
                   <div class="patent">
                       <p class="model-title-p"><span>${ modelInfo.name}</span></p>
-                      <p class="model-title-p model-patent" onclick="check(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.name}','${modelInfo.categoryId}')">商品化专利:<span>${modelInfo.productPatentNum}</span></p>
-                      <p class="model-title-p model-patent1" onclick="check1(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.name}','${modelInfo.categoryId}')">相关专利:<span>${modelInfo.patentNum}</span></p>
+                      <p class="model-title-p model-patent" onclick="check(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.name}','${modelInfo.categoryId}')">商品化专利:<span>${modelInfo.productNum}</span></p>
+                      <p class="model-title-p model-patent1" onclick="check1(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.name}','${modelInfo.categoryId}')">相关专利:<span>${modelInfo.relevantProductNum}</span></p>
                   </div>
                   <div class="icon" style="display:${modelInfo.hasChildren? "block":"none"}">
                       >>>
@@ -286,7 +286,7 @@ export default {
                   </div>
                     <div  class="patent">
                             <p class="model-title-p"><span>${ modelInfo.name}</span></p>
-                            <p class="model-title-p model-patent1" onclick="check1(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.pathName}','${modelInfo.productName}')">相关专利:<span>${modelInfo.patentNum}</span></p>
+                            <p class="model-title-p model-patent1" onclick="check1(${modelInfo.MindId},${modelInfo.MindType},'${modelInfo.pathName}','${modelInfo.productName}')">相关专利:<span>${modelInfo.relevantProductNum}</span></p>
                     </div>
                     <div class="icon" style="display:${ modelInfo.hasChildren? "block":"none"}">
                       >>>
@@ -312,9 +312,10 @@ export default {
           categoryId:categoryId
         }
         let router = this.$router.resolve({
-          path: '/frameworkIndex',
+          path: '/commodity',
           query: {
-            row: JSON.stringify(form),
+            productId:id,
+            productName:name,
           }
         })
         window.open(router.href, '_blank')

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

@@ -67,7 +67,6 @@ export default {
         },
         //专利布局可视化
         MindIndex(row,type){
-            console.log(row)
             const router = this.$router.resolve({
                 path: '/MindIndex',
                 query: {

+ 37 - 22
src/views/project/patentCollection/components/mixins/index.js

@@ -59,18 +59,13 @@ export const projectData = {
       this.$emit('clickPatentNo', row, location)
     },
     changeSelect(patent) {
-      const index1 = this.patentNoList.indexOf(patent.patentNo)
-      if (index1 === -1) {
-        if (this.projectId) {
-          this.patentNoList.push(patent.patentNo)
-        } else {
-          this.patentNoList.push(patent.appNo)
-        }
-
-      } else {
-        this.patentNoList.splice(index1, 1)
-      }
-      this.$emit('addSelect', patent.patentNo)
+      // const index1 = this.patentNoList.indexOf(patent.patentNo)
+      // if (index1 === -1) {
+      //     this.patentNoList.push(patent.patentNo)
+      // } else {
+      //   this.patentNoList.splice(index1, 1)
+      // }
+      // this.$emit('addSelect', patent.patentNo)
     }
   },
 }
@@ -196,10 +191,11 @@ export const handleData = {
             for (let k in row[key]) {
               ipcArr.push(row[key][k])
             }
-            row[`${key}2`] = ipcArr
-            obj.value = `${key}2`
-            obj.type = 'Array'
-            var text = this.$commonJS.getColumnData(row, obj, prop, data)
+            // row[`${key}2`] = ipcArr
+            // obj.value = `${key}2`
+            // obj.type = 'Array'
+            // var text = this.$commonJS.getColumnData(row, obj, prop, data)
+            var text = ipcArr.join('、')
             break;
           case 'legalStatus'://法律状态
           case 'simpleStatus'://专利状态
@@ -225,32 +221,51 @@ export const handleData = {
           obj = text.find(item => {
             return item.if_origin
           })
-          text = obj ? obj.text_content : ''
+          if(obj){
+            var currentText = obj.text_content
+            text = currentText.replace(/(\t){1}/g,'<br/>')
+          }else{
+            text = ''
+          }
           break;
         case '权利要求译文':
           obj = text.find(item => {
             return item.if_origin == false
           })
-          text = obj ? obj.text_content : ''
+          if(obj){
+            var currentText = obj.text_content
+            text = currentText.replace(/(\t){1}/g,'<br/>')
+          }else{
+            text = ''
+          }
           break;
         case '说明书文本原文':
           obj = text.find(item => {
             return item.if_origin
           })
-          var data = obj.text_content.split('\r\n').join('<br/>')
-          text = data ? data : ''
+          if(obj){
+            text = obj.text_content.replace(/(\r\n){1}/g,'<br/>')
+          }else {
+            text = ''
+          }
           break;
         case '说明书文本译文':
           obj = text.find(item => {
             return item.if_origin == false
           })
-          var data = obj.text_content.split('\r\n').join('<br/>')
-          text = data ? data : ''
+          if(obj){
+            text = obj.text_content.replace(/(\r\n){1}/g,'<br/>')
+          }else {
+            text = ''
+          }
           break;
 
         default:
           break;
       }
+      if (!text) {
+        return ""
+      }
       if (this.patent && this.patent.patentNo && field) {
         // SET_PATENT_OPINION_CONTRAST
         var arr = ['piZhuContrastList', 'contrastList', 'opinionContrastList']

+ 9 - 4
src/views/project/patentCollection/components/views/Table.vue

@@ -5,10 +5,15 @@
       <el-table-column label="#" width="60" type="index" align="center">
         <template slot-scope="scope">
           <div v-if="refresh">
-            <el-checkbox :label="scope.row.id" @change="changeSelect(scope.row)"
-              :checked="patentNoList.filter(item => { return item == scope.row.patentNo || item == scope.row.appNo }).length > 0">
-              <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
-            </el-checkbox>
+            <el-checkbox-group v-model="patentNoList">
+              <el-checkbox :label="scope.row.patentNo">
+                <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+              </el-checkbox>
+            </el-checkbox-group>
+            <!-- <el-checkbox :label="scope.row.patentNo" @change="changeSelect(scope.row)"
+                :checked="patentNoList.filter(item => { return item == scope.row.patentNo || item == scope.row.appNo }).length > 0">
+                <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>
+              </el-checkbox> -->
           </div>
           <div v-else>
             <span>{{ (scope.$index + 1) + ((queryParams.current - 1) * queryParams.size) }}</span>

+ 22 - 0
src/views/project/patentCollection/index.vue

@@ -569,6 +569,28 @@ export default {
       }
       this.$refs.PatentBatchIndexVue.open(obj)
     },
+    //价值曲线
+    checkPatentWorth(){
+      let obj = {
+        selectQuery: {
+          isAdd: this.queryParams.isAdd,
+          isDelete: this.queryParams.isDelete,
+          startNumber: this.startNumber,
+          endNumber: this.endNumber,
+        },
+        searchQuery: this.searchStr,
+        customFields: this.customFields,
+        orderDTOList:this.sort,
+      }
+      let router = this.$router.resolve({
+        path: '/patentWorth',
+        query: {
+          projectId: this.projectId,
+          ...obj
+        }
+      })
+      window.open(router.href, '_blank')
+    },
     //导出专利
     async handleExport(val) {
       if (val) {

+ 6 - 1
src/views/project/patentDetails/components/menu.vue

@@ -133,7 +133,10 @@ export default {
       }
     },
     projectId:{
-      default:0
+      default:null
+    },
+    productId:{
+      default:null
     },
     reportType:{
       default:0
@@ -334,6 +337,8 @@ export default {
       let params = {
         ...this.queryParams,//分页信息
         projectId: this.projectId,
+        productId:this.productId,
+        from:this.productId?'product':null,
         taskId:this.taskId,
         searchQuery: this.$commonJS.objectToString(this.searchOption),//检索条件
         // orderDTOList: this.sort,//排序信息

+ 2 - 2
src/views/project/patentDetails/components/patentDetails.vue

@@ -83,8 +83,8 @@
               <div slot="left">
                 <component :activeName="activeMenu" style="width:100%;padding-right: 10px;" :is="activeMenu"
                   :evidence="evidence" :signPatentNo="signPatentNo" :reportType="reportType" :project-id="projectId"
-                  :outside="outside" :projectType="projectType" :patent="patent" :patentNo="[patent.patentNo]"
-                  :domId="patent.patentNo + '1'" @refresh="getPatent()"></component>
+                  :outside="outside" :projectType="projectType" :patent="patent" :patentNo="patent.patentNo"
+                  :domId="$commonJS.uuid(36)" @refresh="getPatent()"></component>
               </div>
               <div slot="right">
                 <component :is="activeMenu2" :project-id="projectId" :outside="outside" :projectType="projectType"

+ 18 - 27
src/views/project/patentDetails/components/patentMessage/history/echarts/components/echarts.vue

@@ -27,8 +27,7 @@
             </div>
         </div>
         <div>
-            <component :is='component' :ref="component" v-bind="$attrs"></component>  
-            
+            <component :is='component' :ref="component" v-bind="$attrs"></component> 
         </div>
     </div>
 </template>
@@ -36,7 +35,16 @@
 import { commonMethods } from './echarts'
 export default {
     mixins:[commonMethods],
-    props:['patentNo'],
+    props:{
+        searchQuery:{
+            default:()=>{
+                return {}
+            }
+        },
+        patentNo:{
+            default:null
+        }
+    },
     components:{
     },
     data() {
@@ -84,7 +92,6 @@ export default {
                 },
             ],
             areaList:[],
-            companyList:[],
         }
     },
     watch:{
@@ -97,9 +104,6 @@ export default {
     },
     methods: {
         changeRelation(){
-            var relation = this.relationList.find(i=>{
-                return i.value == this.queryParams.relation
-            })
             var option = {
                 customLicenseMoney:'预估许可价值',
                 licenseFee:'已发生的许可费用',
@@ -114,7 +118,7 @@ export default {
         },
        async init(){
            await this.getData()
-        this.changeRelation()
+            this.changeRelation()
             const [areaList] = await Promise.allSettled([this.getAreaList()])
             this.areaList= areaList.status =='fulfilled'?areaList.value.map(item=>{
                 return {
@@ -122,16 +126,15 @@ export default {
                     label:item
                 }
             }):[]
-            if(this.type == 1){
-                this.getCompanyList()
-            }
-            
             
         },
        async getData(){
-            this.queryParams.patentNoList =this.patentNo
             this.queryParams.saleArea = this.queryParams.area
-            await this.$api.PatentWorth(this.queryParams).then(response=>{
+            var params = {
+                ...this.searchQuery,
+                ...this.queryParams
+            }
+            await this.$api.PatentWorth(params).then(response=>{
                     if(response.code == 200){
                         this.chartData = response.data
                     }
@@ -145,19 +148,7 @@ export default {
             }
             return this.$api.getAreaList(params).then(response=> response.data)
         },
-        getCompanyList(){
-             this.$api.getCompanyList({id:this.id}).then(response=>{
-                if(response.code == 200){
-                     this.companyList=response.data?response.data.map(item=>{
-                        return {
-                            value:item,
-                            label:item
-                        }
-                    }):[]
-                }
-            }
-            )
-        }
+
     },
 }
 </script>

+ 5 - 1
src/views/project/patentDetails/components/patentMessage/history/echarts/index.vue

@@ -1,9 +1,10 @@
 <template>
     <div>
-        <chart></chart>
+        <chart :searchQuery="searchQuery"></chart>
     </div>
 </template>
 <script>
+import routeVue from '@/utils/model/route.vue';
 import chart from './components/echarts.vue'
 export default{
     components:{
@@ -15,6 +16,9 @@ export default{
         }
     },
     computed:{
+        searchQuery(){
+            return this.$routeVue.query
+        }
     }
 }
 </script>

+ 5 - 1
src/views/project/patentDetails/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="height_100 article" :style="{ 'flex-direction': isRight ? 'row-reverse' : 'row' }">
     <articleMenu @event="event" :value="showView" :reportType="reportType" :menu="menuList" :isRight="isRight" :outside="outside"
-      :projectId="projectId" :taskId="taskId" :searchOption="search.searchOption" :patentNo="patentNo" :fromPath="search.fromPath"
+      :projectId="projectId" :productId="productId" :taskId="taskId" :searchOption="search.searchOption" :patentNo="patentNo" :fromPath="search.fromPath"
       :location="search.location" @getPatentLeft="getPatentLeft" :handlerType="handlerType"></articleMenu>
     <div class="height_100 content">
       <my-View :showView="showView">
@@ -86,6 +86,9 @@ export default {
     projectType() {
       return this.$route.query.projectType//判断是不是从专题库进入专利详情1为专题库2为报告(报告未传2)
     },
+    productId(){
+      return this.$route.query.productId
+    }
   },
   created() { },
   mounted() {
@@ -209,6 +212,7 @@ export default {
             signPatentNo:this.signPatentNo,
             outside:this.outside,
             projectType:this.projectType,
+            productId:this.productId
           }
         }
       )