zhuliu пре 8 месеци
родитељ
комит
4a2040775c
35 измењених фајлова са 1958 додато и 351 уклоњено
  1. 5 0
      src/App.vue
  2. 1 0
      src/icons/svg/保存检索式.svg
  3. 17 6
      src/router/index.js
  4. 102 32
      src/utils/common.js
  5. 91 54
      src/utils/constants.js
  6. 7 0
      src/utils/model/menuInRow/index.vue
  7. 24 3
      src/utils/model/search/search.vue
  8. 111 18
      src/views/components/import/conditionImport/AdvancedSearch.vue
  9. 11 16
      src/views/components/import/conditionImport/FormSearch.vue
  10. 350 0
      src/views/components/import/conditionImport/components/searchHelp/components/searchField.vue
  11. 330 0
      src/views/components/import/conditionImport/components/searchHelp/components/searchGrammar.vue
  12. 26 0
      src/views/components/import/conditionImport/components/searchHelp/index.vue
  13. 71 0
      src/views/components/import/conditionImport/components/searchHelp/searchHelp.vue
  14. 1 1
      src/views/components/import/conditionImport/components/searchHistory/index.vue
  15. 25 10
      src/views/components/import/conditionImport/customSearch.vue
  16. 2 2
      src/views/components/import/conditionImport/index.vue
  17. 163 6
      src/views/components/import/conditionImport/internal_search/filter_search.vue
  18. 140 0
      src/views/components/import/conditionImport/internal_search/indexMixins.js
  19. 17 109
      src/views/components/import/conditionImport/internal_search/mixins.js
  20. 278 45
      src/views/components/import/conditionImport/internal_search/searchResult_internal.vue
  21. 41 0
      src/views/components/import/conditionImport/mixins.js
  22. 44 6
      src/views/components/import/conditionImport/search.vue
  23. 8 6
      src/views/components/import/conditionImport/searchResultIndex.vue
  24. 1 1
      src/views/event/components/index.vue
  25. 48 5
      src/views/home/index.vue
  26. 1 2
      src/views/layout/index.vue
  27. 8 4
      src/views/product/components/commodity/commodity.vue
  28. 1 1
      src/views/product/components/index.vue
  29. 1 1
      src/views/project/index.vue
  30. 8 6
      src/views/project/patentCollection/index.vue
  31. 8 8
      src/views/project/patentDetails/components/menu.vue
  32. 1 1
      src/views/project/patentDetails/index.vue
  33. 7 3
      src/views/report/components/checkPatent/checkPatent.vue
  34. 1 1
      src/views/report/components/index.vue
  35. 8 4
      src/views/report/components/patentList/components/index.vue

+ 5 - 0
src/App.vue

@@ -48,6 +48,11 @@ export default {
 </script>
 
 <style lang="scss">
+.patent-list-container{
+  overflow:auto;
+  padding:15px;
+  height:calc(100% - 30px)
+}
 //driver.js
 .driver-fix-stacking .header {
   position:relative;

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
src/icons/svg/保存检索式.svg


+ 17 - 6
src/router/index.js

@@ -54,12 +54,12 @@ const routes = [
       //专利数据库
       {
         path: '/project',
-        name: 'Project',
         component: { render(c) { return c('router-view') } },
         redirect: '/project',
         children: [
           {
             path: '/',
+            name: 'Project',
             meta: {
               title: '专利数据库',
               sign: 'project',
@@ -186,13 +186,13 @@ const routes = [
       // // 产品
       {
         path: '/product',
-        name: 'Product',
+        name: '',
         component: { render(c) { return c('router-view') } },
         redirect: '/product',
         children: [
           {
             path: '/',
-            name: '/',
+            name: 'Product',
             meta: {
               title: '产品/技术',
               sign: 'product',
@@ -256,12 +256,13 @@ const routes = [
       //事件
       {
         path: '/Event',
-        name: 'Event',
+        
         component: { render(c) { return c('router-view') } },
         redirect: '/Event',
         children: [
           {
             path: '/',
+            name: 'Event',
             meta: {
               title: '事件',
               sign: 'event',
@@ -286,13 +287,12 @@ const routes = [
       //报告
       {
         path: '/AllReport',
-        name: 'AllReport',
         component: { render(c) { return c('router-view') } },
         redirect: '/AllReport',
         children: [
           {
             path: '/',
-            name:'AllReport/',
+            name:'AllReport',
             meta: {
               title: '报告',
               sign: 'report',
@@ -608,6 +608,17 @@ const routes = [
         },
         component: () => import('@/views/components/import/conditionImport'),
       },
+      //检索帮助
+      {
+        path: '/searchHelp',
+        name: "searchHelp",
+        meta: {
+          title: '检索说明',
+          sign: 'searchHelp',
+          belong: 'searchHelp',
+        },
+        component: () => import('@/views/components/import/conditionImport/components/searchHelp/index.vue'),
+      },
       //检索历史
       {
         path: "/searchHistory",

+ 102 - 32
src/utils/common.js

@@ -153,49 +153,119 @@ treeToArray(data,prop={children:children}){
     var arr = queryString.split(/(\s+ and | AND | OR | or | NOT | not \s+)/g)
     var regex = /\s/
     var regex1 = /^["].*["]$|^['].*[']$|^[“].*[”]$|^[‘].*[’]$/
+    var regex2 = /['"’‘“”]/
     var values = []
     for(var i = 0;i<arr.length;i++){
-    if(sign.includes(arr[i].trim())){
-        values.push(arr[i])
-        continue;
-    }
-    if(regex.test(arr[i])){
-        if(!regex1.test(arr[i])){
-            var str = `"${arr[i]}"`
-            values.push(str)
-        }
-        continue;
-    }
-     values.push(arr[i])
+      if(sign.includes(arr[i].trim())){
+          values.push(arr[i])
+          continue;
+      }
+      // if(regex.test(arr[i])){
+      //     if(!regex1.test(arr[i])){
+      //         var str = `"${arr[i]}"`
+      //         values.push(str)
+      //     }
+      //     continue;
+      // }
+      values.push(arr[i])
     }
     var StringRegex = /[()]/g
+    var longStr = ''
     for (let i = 0; i < values.length; i++){
         let item = values[i].trim()
-        if(regex1.test(item)){
-            if(!sign.includes(item)){
-                item = item.replace(StringRegex,'')
-                obj.value.push(item)
+        var index = item.indexOf('=')
+        if(index==-1){
+          index = item.indexOf('≡')
+        }
+        if(index!=-1){
+          var field = item.substring(0,index)
+          var value = item.substring(index+1,item.length)
+          field = field.replace(StringRegex,'')
+          value = value.replace(StringRegex,'').trim()
+          obj = {
+            field:field.trim(),
+            value:[]
+          }
+          if(regex2.test(value)){//如果包含了引号
+            if(regex1.test(value)){
+              obj.value.push(value.replace(/['"’‘“”]/g,''))
+            }else{
+              longStr += value
             }
+          }else{
+            obj.value.push(value)
+          }
+          result.push(obj)
         }else{
-            var index = item.indexOf('=')
-            if(index!=-1){
-                var field = item.substring(0,index)
-                var value = item.substring(index+1,item.length)
-                field = field.replace(StringRegex,'')
-                value = value.replace(StringRegex,'')
-                obj = {
-                    field:field,
-                    value:[value]
-                }
-                result.push(obj)
+          // if(longStr){
+          //   var value = values[i].replace(StringRegex,'')
+          //   longStr = longStr + value
+          // }
+          // if(regex2.test(item)){
+          //   obj.value.push(longStr.replace(/['"’‘“”]/g,''))
+          //   longStr = ''
+          //   continue
+          // }
+
+          if(regex2.test(item)){//如果包含了引号
+            if(regex1.test(item)){
+              obj.value.push(item.replace(/['"’‘“”]/g,''))
+              longStr = ''
             }else{
-                if(!sign.includes(item)){
-                    item = item.replace(StringRegex,'')
-                    obj.value.push(item)
-                }
-                
+              longStr += values[i]
+            }
+          }else{
+            if(longStr){
+              var value = values[i].replace(StringRegex,'')
+              longStr = longStr + value
             }
+          }
+          if(!sign.includes(item)){
+              item = item.replace(StringRegex,'')
+              var value = item.trim()
+              if(regex2.test(item)){//如果包含了引号
+                if(regex1.test(value)){
+                  obj.value.push(value.replace(/['"’‘“”]/g,''))
+                }else{
+                  longStr += item
+                }
+              }else{
+                obj.value.push(value)
+              }
+          }
+            
         }
+
+
+
+        // if(regex1.test(item)){
+        //     if(!sign.includes(item)){
+        //         item = item.replace(StringRegex,'')
+        //         obj.value.push(item)
+        //     }
+        // }else{
+        //     var index = item.indexOf('=')
+        //     if(index==-1){
+        //       index = item.indexOf('≡')
+        //     }
+        //     if(index!=-1){
+        //         var field = item.substring(0,index)
+        //         var value = item.substring(index+1,item.length)
+        //         field = field.replace(StringRegex,'')
+        //         value = value.replace(StringRegex,'')
+        //         obj = {
+        //             field:field,
+        //             value:[value]
+        //         }
+        //         result.push(obj)
+        //     }else{
+        //         if(!sign.includes(item)){
+        //             item = item.replace(StringRegex,'')
+        //             obj.value.push(item)
+        //         }
+                
+        //     }
+        // }
     }
     var resultObj = {}
     for(var i = 0;i<result.length;i++){

+ 91 - 54
src/utils/constants.js

@@ -80,16 +80,22 @@ export default {
     { label: 'Microsoft YaHei', value: 'Microsoft YaHei' },
   ],
   /**
-   * 检索栏位type为1表示中国仅有,2表示世界仅有,3表示两者都包含
+   * 检索栏位DBType为可检索的范围CN:外部中国专利,WD:外部全球专利,inner_CN:内部中国专利,inner_WD:内部全球专利
    * dataType为数据格式:1为字符串,2为日期,3为数组,5为专利数据库,6为报告
    */
+  DBTypes:{
+    CN:'外部中国专利检索',
+    WD:'外部全球专利检索',
+    inner_CN:'内部中国专利检索',
+    inner_WD:'内部全球专利检索',
+  },
   searchField:[
     {
       label:'项目库',
       value:'project',
       DBType:['inner_CN','inner_WD'],
       children:[
-        {label: '专利数据库', value: 'projectId',DBType:['inner_CN','inner_WD'],dataType:5,placeholder:'请选择专利数据库'},
+        {label: '专利数据库', value: 'projectName',DBType:['inner_CN','inner_WD'],dataType:5,placeholder:'请选择专利数据库'},
       ]
     },
     {
@@ -97,12 +103,12 @@ export default {
       value:'text',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '发明名称/标题', value: 'TI',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入发明名称/标题,例:计算机 OR "computer and phone"'},
-        {label: '主权利要求', value: 'CL',DBType:['CN'],type:1,dataType:1,placeholder:'请输入主权利要求,例:加煤系统 OR "computer and phone"'},
-        {label: '权利要求', value: 'CL',DBType:['inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入权利要求,例:加煤系统 OR "computer and phone"'},
-        {label: '说明书', value: 'ins',DBType:['inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入说明书,例:加煤系统 OR "computer and phone"'},
-        {label: '关键词', value: 'TX',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入关键词,例:石墨烯 OR "computer and phone"'},
-        {label: '摘要', value: 'AB',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入摘要或简要说明,例:外喷放热气 OR "computer and phone"'},
+        {label: '发明名称/标题', value: 'TI',DBType:['CN','WD','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入发明名称/标题,例:计算机 OR "computer and phone"'},
+        {label: '主权利要求', value: 'CL',DBType:['CN'],type:'文本',dataType:1,placeholder:'请输入主权利要求,例:加煤系统 OR "computer and phone"'},
+        {label: '权利要求', value: 'CL',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入权利要求,例:加煤系统 OR "computer and phone"'},
+        {label: '说明书', value: 'ins',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入说明书,例:加煤系统 OR "computer and phone"'},
+        {label: '关键词', value: 'TX',DBType:['CN','WD','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入关键词,例:石墨烯 OR "computer and phone"'},
+        {label: '摘要', value: 'AB',DBType:['CN','WD','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入摘要或简要说明,例:外喷放热气 OR "computer and phone"'},
       ]
     },
     {
@@ -110,13 +116,13 @@ export default {
       value:'number',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '申请号', value: 'AN',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入申请号,例:CN202330275114.7 OR CN202330275114.7'},
-        {label: '原始申请号', value: 'ANO',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入原始申请号,例:CN202330275109.6 OR CN202330275109.6'},
-        {label: '授权公告号', value: 'GN',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入授权公告号,例:CN102860161 OR CN1526554846'},
-        {label: '公开号', value: 'PN',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入公开号,例:CN102860161 OR CN1526554846'},
-        { label: '原始公开号', value: 'PNO', DBType:['WD'],type: 2, dataType: 1, placeholder: '请输入原始公开号,例:CN102860161 OR CN1526554846' },
-         {label: '优先权号', value: 'PR',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入优先权号,例:DEP3833692.8'},
-         {label: 'PCT申请号', value: 'PCTAN',DBType:['inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入PCT申请号'},
+        {label: '申请号', value: 'AN',DBType:['CN','WD','inner_CN','inner_WD'],type:'号码',dataType:1,placeholder:'请输入申请号,例:CN202330275114.7 OR CN202330275114.7'},
+        {label: '原始申请号', value: 'ANO',DBType:['CN','WD'],type:'号码',dataType:1,placeholder:'请输入原始申请号,例:CN202330275109.6 OR CN202330275109.6'},
+        {label: '授权公告号', value: 'GN',DBType:['CN','inner_CN','inner_WD'],type:'号码',dataType:1,placeholder:'请输入授权公告号,例:CN102860161 OR CN1526554846'},
+        {label: '公开号', value: 'PN',DBType:['CN','WD','inner_CN','inner_WD'],type:'号码',dataType:1,placeholder:'请输入公开号,例:CN102860161 OR CN1526554846'},
+        { label: '原始公开号', value: 'PNO', DBType:['WD'],type: '号码', dataType: 1, placeholder: '请输入原始公开号,例:CN102860161 OR CN1526554846' },
+         {label: '优先权号', value: 'PR',DBType:['CN','WD','inner_CN','inner_WD'],type:'号码',dataType:1,placeholder:'请输入优先权号,例:DEP3833692.8'},
+         {label: 'PCT申请号', value: 'PCTAN',DBType:['inner_CN','inner_WD'],type:'号码',dataType:1,placeholder:'请输入PCT申请号'},
       ]
     },
     {
@@ -125,8 +131,9 @@ export default {
       show:true,
       DBType:['CN','inner_CN','inner_WD'],
       children:[
-        {label: '专利类型',value: 'PT',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:3},
-        {label: '法律状态', value: 'LG',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:3},
+        {label: '专利类型',value: 'PT',DBType:['CN','inner_CN','inner_WD'],type:'数字',dataType:3},
+        {label: '法律状态', value: 'LG',DBType:['CN'],type:'数字',dataType:3},
+        {label: '法律状态', value: 'SS',DBType:['inner_CN','inner_WD'],type:'数字',dataType:3},
       ]
     },
     {
@@ -134,25 +141,37 @@ export default {
       value:'typeNumber',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '分类号', value: 'IC',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入分类号,例:21-01 OR B61D47/00'},
-        {label: '主分类号', value: 'MC',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入分类号,例:21-01 OR B61D47/00'},
+        {label: '分类号', value: 'IC',DBType:['CN','WD'],type:'文本',dataType:1,placeholder:'请输入分类号,例:21-01 OR B61D47/00'},
+        {label: '主分类号', value: 'MC',DBType:['CN','WD'],type:'文本',dataType:1,placeholder:'请输入分类号,例:21-01 OR B61D47/00'},
+        {label: 'IPC分类号', value: 'IC',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC分类号,例:21-01 OR B61D47/00',
+          after:[
+            {label: 'IPC部', value: 'IC1',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC部'},
+            {label: 'IPC大类', value: 'IC2',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC大类'},
+            {label: 'IPC小类', value: 'IC3',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC小类'},
+            {label: 'IPC大组', value: 'IC4',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC大组'},
+          ]
+        },
+        {label: 'LOC分类号', value: 'LOC',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入LOC分类号,例:21-01 OR B61D47/00',
+          after:[
+            {label: 'LOC大类', value: 'LOC1',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入IPC部'},
+          ]
+        },
         // {label: '优先权号', value: 'PR',type:3,dataType:1,placeholder:'请输入优先权号,例:DEP3833692.8'},
-        {label: '范畴分类', value: 'CT',DBType:['CN'],type:1,dataType:1,placeholder:'请输入范畴分类,例:32D OR 40B'},
-        {label: '欧洲分类', value: 'EC',DBType:['WD'],type:2,dataType:1,placeholder:'请输入欧洲分类号'},
+        {label: '范畴分类', value: 'CT',DBType:['CN'],type:'文本',dataType:1,placeholder:'请输入范畴分类,例:32D OR 40B'},
+        {label: '欧洲分类', value: 'EC',DBType:['WD'],type:'文本',dataType:1,placeholder:'请输入欧洲分类号'},
 
-        {label: 'IPC分类号', value: 'MIPC',DBType:['inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入IPC分类号,例:21-01 OR B61D47/00'},
-        {label: 'LOC分类号', value: 'MLOC',DBType:['inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入LOC分类号,例:21-01 OR B61D47/00'},
-      ]
+        
+      ],
     },
     {
       label:'日期',
       value:'date',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '申请日', value: 'AD',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入申请日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
-        {label: '授权公告日', value: 'GD',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入授权公告日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
-        {label: '公开日', value: 'PD',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入公开日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
-        {label: '优先权日', value: 'PRD',DBType:['inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入优先权日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
+        {label: '申请日', value: 'AD',DBType:['CN','WD','inner_CN','inner_WD'],type:'日期',dataType:1,placeholder:'请输入申请日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
+        {label: '授权公告日', value: 'GD',DBType:['CN','inner_CN','inner_WD'],type:'日期',dataType:1,placeholder:'请输入授权公告日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
+        {label: '公开日', value: 'PD',DBType:['CN','WD','inner_CN','inner_WD'],type:'日期',dataType:1,placeholder:'请输入公开日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
+        {label: '优先权日', value: 'PRD',DBType:['inner_CN','inner_WD'],type:'日期',dataType:1,placeholder:'请输入优先权日,例:2020 OR 202001 OR 20230101 OR 20230101~20230601'},
       ]
     },
     {
@@ -160,15 +179,15 @@ export default {
       value:'person',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '发明人', value: 'IN',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入发明人,例:钟丽红'},
-        {label: '第一发明人', value: 'FI',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入第一发明人,例:钟丽红'},
-        {label: '申请人', value: 'PA',DBType:['CN','WD','inner_CN','inner_WD'],type:3,dataType:1,placeholder:'请输入申请人,例:钟丽红'},
-        {label: '第一申请人', value: 'FP',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入第一申请人,例:钟丽红'},
-        {label: '权利人', value: 'PE',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入权利人,例:钟丽红'},
+        {label: '发明人', value: 'IN',DBType:['CN','WD','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入发明人,例:钟丽红'},
+        {label: '第一发明人', value: 'FI',DBType:['CN','WD'],type:'文本',dataType:1,placeholder:'请输入第一发明人,例:钟丽红'},
+        {label: '申请人', value: 'PA',DBType:['CN','WD','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入申请人,例:钟丽红'},
+        {label: '第一申请人', value: 'FP',DBType:['CN','WD'],type:'文本',dataType:1,placeholder:'请输入第一申请人,例:钟丽红'},
+        {label: '权利人', value: 'PE',DBType:['CN','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入权利人,例:钟丽红'},
         // {label: '代理机构代码', value: 'AG',type:1,dataType:1,placeholder:'请输入代理机构代码,例:11223'},
-        {label: '代理人', value: 'AT',DBType:['CN'],type:1,dataType:1,placeholder:'请输入代理人,例:张三'},
-        {label: '代理人', value: 'AG',DBType:['inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入代理人,例:张三'},
-        {label: '代理机构名称', value: 'AGN',DBType:['CN','inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入代理机构名称,例:威士博'},
+        {label: '代理人', value: 'AT',DBType:['CN'],type:'文本',dataType:1,placeholder:'请输入代理人,例:张三'},
+        {label: '代理人', value: 'AG',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入代理人,例:张三'},
+        {label: '代理机构名称', value: 'AGN',DBType:['CN','inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入代理机构名称,例:威士博'},
       ]
     },
     {
@@ -180,9 +199,9 @@ export default {
         // {label: '国省代码', value: 'CO',type:3,dataType:1,placeholder:'请输入国省代码,例:94 OR CN'},
         // {label: '发明人国家', value: 'ICO',type:2,dataType:1,placeholder:'请输入发明人国家,例:94 OR CN'},
         // {label: '国家', value: 'GJ',type:3,dataType:3,placeholder:'请输入国家,例:CN'},
-        {label: '申请人地址', value: 'DZ',DBType:['CN'],type:1,dataType:1,placeholder:'请输入申请人地址,例:深圳市南山区'},
-        {label: '申请人地址', value: 'ADD',DBType:['inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入申请人地址,例:深圳市南山区'},
-        {label: '权利人地址', value: 'RDD',DBType:['inner_CN','inner_WD'],type:1,dataType:1,placeholder:'请输入权利人地址,例:深圳市南山区'},
+        {label: '申请人地址', value: 'DZ',DBType:['CN'],type:'文本',dataType:1,placeholder:'请输入申请人地址,例:深圳市南山区'},
+        {label: '申请人地址', value: 'ADD',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入申请人地址,例:深圳市南山区'},
+        {label: '权利人地址', value: 'RDD',DBType:['inner_CN','inner_WD'],type:'文本',dataType:1,placeholder:'请输入权利人地址,例:深圳市南山区'},
       ]
     },
     {
@@ -190,29 +209,33 @@ export default {
       value:'country',
       DBType:['CN','WD','inner_CN','inner_WD'],
       children:[
-        {label: '申请人国家/地区', value: 'CO',DBType:['CN'],type:1,dataType:1,placeholder:'请输入国省代码,例:94 OR CN'},
+        {label: '申请人国家/地区', value: 'CO',DBType:['CN'],type:'文本',dataType:1,placeholder:'请输入国省代码,例:94 OR CN'},
         // {label: '发明人国家', value: 'ICO',type:2,dataType:1,placeholder:'请输入发明人国家,例:94 OR CN'},
-        {label: '受理局', value: 'GJ',DBType:['WD'],type:2,dataType:3,placeholder:'请输入国家,例:CN'},
-        {label: '申请国家', value: 'CO',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入国家,例:CN'},
-        {label: '申请人国家', value: 'AAC',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入申请人国家,例:CN'},
-        {label: '权利人国家', value: 'DZ',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入权利人国家,例:CN'},
+        {label: '受理局', value: 'GJ',DBType:['WD'],type:'文本',dataType:3,placeholder:'请输入国家,例:CN'},
+        {label: '申请国家', value: 'CO',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入国家,例:CN'},
+        {label: '申请人国家', value: 'AAC',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入申请人国家,例:CN',
+          after:[
+            {label: '申请人省', value: 'ADP',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入申请人省'},
+            {label: '申请人市', value: 'ADC',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入申请人市'},
+            {label: '申请人区县', value: 'ADD',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入申请人区县'},
+          ]
+        },
+        {label: '权利人国家', value: 'DZ',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入权利人国家,例:CN',
+          after:[
+            {label: '权利人省', value: 'RDP',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入权利人省'},
+            {label: '权利人市', value: 'RDC',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入权利人市'},
+            {label: '权利人区县', value: 'RDD',DBType:['inner_CN','inner_WD'],type:'文本',dataType:3,placeholder:'请输入权利人区县'},
+          ]
+        },
       ],
-      otherField:[
-        {label: '申请人省', value: 'ADP',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入申请人省'},
-        {label: '申请人市', value: 'ADC',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入申请人市'},
-        {label: '申请人区县', value: 'ADD',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入申请人区县'},
-        {label: '权利人省', value: 'RDP',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入权利人省'},
-        {label: '权利人市', value: 'RDC',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入权利人市'},
-        {label: '权利人区县', value: 'RDD',DBType:[,'inner_CN','inner_WD'],type:2,dataType:3,placeholder:'请输入权利人区县'},
-      ]
     },
     {
       label:'引用',
       value:'excerpt',
       DBType:['CN','WD'],
       children:[
-        {label: '引用专利', value: 'CC',DBType:['CN','WD'],type:3,dataType:1,placeholder:'请输入引用专利,例:US1743377A,1930.01.14'},
-        {label: '引用非专利', value: 'UCC',DBType:['CN'],type:1,dataType:1,placeholder:'请输入引用非专利'},
+        {label: '引用专利', value: 'CC',DBType:['CN','WD'],type:'号码',dataType:1,placeholder:'请输入引用专利,例:US1743377A,1930.01.14'},
+        {label: '引用非专利', value: 'UCC',DBType:['CN'],type:'号码',dataType:1,placeholder:'请输入引用非专利'},
       ]
     },
   ],
@@ -230,6 +253,20 @@ export default {
     value:3
   },
 ],
+SS:[//法律状态
+  {
+    label:'有效',
+    value:1
+  },
+  {
+    label:'无效',
+    value:2
+  },
+  {
+    label:'审中',
+    value:3
+  },
+],
 PT:[//专利类型
   {
     label:'发明',

+ 7 - 0
src/utils/model/menuInRow/index.vue

@@ -59,6 +59,10 @@ async function menuInRowFun(el,binding,childNodes,vnode){
     }
     //   var widths = []
     for(var i = 0;i<childNodes.length;i++){
+        if(childNodes[i].nodeName == '#comment'){
+            num ++
+            continue
+        }
         let childWidth = await getElementWidthWithMargin(childNodes[i])
         // widths.push(childWidth)
         width += childWidth
@@ -83,6 +87,9 @@ function showDom(el, binding,vnode){
     var type = binding.value
     var childNodes = el.childNodes
     for(let i = 0;i<childNodes.length;i++){
+        if(childNodes[i].nodeName == '#comment'){
+            continue
+        }
         let child = childNodes[i]
         let num = i
         if(type == 'show'){

+ 24 - 3
src/utils/model/search/search.vue

@@ -66,7 +66,7 @@
                                         </el-date-picker>
                                     </div>
                                     <div v-else-if="list[i].dataType==3" style="width:100%">
-                                        <el-select v-model="list[i].value" size="small" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
+                                        <el-select v-model="list[i].value" @change="getShowLabel(list[i])" size="small" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
                                             <el-option
                                                 v-for="item in constants[list[i].field]"
                                                 :key="item.value"
@@ -255,6 +255,7 @@ export default {
             if(this.list.length == 0){
                 this.rule()
             }
+            this.getFieldObj()
             // this.list.length = 0
             
         },
@@ -278,12 +279,26 @@ export default {
         
     },
     methods: {
+        getShowLabel(row){
+            row.show.value = []
+            if(!row.value){
+                return
+            }
+            var arr = this.constants[row.field]
+            row.value.forEach(value=>{
+                var obj = arr.find(item=>{
+                    return item.value == value
+                })
+                row.show.value.push(obj?obj.label:'')
+            })
+        },
         change(list){
             var a = this.filedList.find(item=>{
                 return item.value == list.field
             })
             list.dataType = a.dataType
             list.placeholder = a.placeholder
+            list.show.label = a.label
             if(list.dataType==2 || list.dataType==3){
                 var type = list.dataType
                 this.$set(list,'value', '')
@@ -308,13 +323,19 @@ export default {
             })
             if(!a){
                 obj.dataType = 1
-                obj.field='PN'
-                obj.placeholder='请输入公开号,例:CN102860161 OR CN1526554846'
+                obj.field='TX'
+                obj.placeholder='请输入关键词,例:石墨烯 OR &quot;computer and phone&quot;'
                 obj.value = ''
+                obj.show = {
+                    label:'关键词'
+                }
                 return obj
             }
             obj.dataType = a.dataType
             obj.placeholder = a.placeholder
+            obj.show = {
+                label:a.label
+            }
             if(a.dataType==2 || a.dataType==3){
                 this.$set(obj,'value', [])
             }else{

+ 111 - 18
src/views/components/import/conditionImport/AdvancedSearch.vue

@@ -1,5 +1,17 @@
 <template>
   <div class="advancedSearch">
+    <div v-if="DBType!='CN' && DBType!='WD'" style="width:100%;display:flex;align-items:center;margin-bottom:10px;">
+        <div style="min-width:100px">专利数据库:</div>
+        <el-select v-model.number="projectId" @change="changeProject" style="width:100%" size="small" filterable remote clearable placeholder="请选择" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod" @focus="remoteMethod('')">
+            <el-option
+                v-for="item in projectQuery.data"
+                :key="item.id"
+                :label="item.name"
+                :value="parseInt(item.id)"
+            >
+            </el-option>
+        </el-select>
+    </div>
     <div>
         <el-input type="textarea" v-model="condition" :rows="3" placeholder='高级检索语句,例:TI=(石墨烯 NOT 石墨烯薄膜 OR "graphene film") AND AD=2018 AND GD=20180205~20190101'></el-input>
         <div style="display:flex;justify-content: flex-end;margin-top:20px">
@@ -8,7 +20,7 @@
         </div>
     </div>
     <div>
-        <div>
+        <!-- <div>
             <div><b>表达式与语法:</b></div>
             检索条件表达式,可支持AND、OR、NOT等逻辑符号(不区分大小写),其中:<br>
             1、如果检索条件中含有空格或者换行且需要作为一个整体条件查询时需要使用双引号括起来,例如:<span class="red">TI=(石墨烯 NOT 石墨烯薄膜 OR "graphene film")</span><br>
@@ -18,18 +30,18 @@
             5、专利类型(PT)栏位的值包括:1、8 为发明 检索发明,2、9 为新型,3 为外观(注意:仅中国专利);例如:<span class="red">PT=1</span><br>
             6、法律状态(LG)栏位的值包括:1: 有效、2: 失效、3: 审中(注意:仅中国专利);例如:<span class="red">LG=1</span><br>
             7、国家(地区)相关栏位的值为国家地区代码,需要大写,例如:CN代表中国、US代表美国、JP代表日本等;<br>
-        </div>
+        </div> -->
         <div>
-            <div><b>检索栏位包括:</b></div>
+            <!-- <div><b>检索栏位包括:</b></div>
             <div class="field">
-                <p v-for="item in field.filter(item=>{return item.DBType.indexOf(DBType)!=-1})" :key="item.label"><span style="color:red">{{ item.value }}</span>:{{ item.label }}</p>
-            </div>
-            <div><b>省市代码(仅中国专利):</b></div>
-            <div v-html="changeRed('province')">
+                <p v-for="item in field.filter(item=>{return item.DBType.indexOf(DBType)!=-1 && item.value!='projectName'})" :key="item.label"><span style="color:red">{{ item.value }}</span>:{{ item.label }}</p>
+            </div> -->
+            <div style="margin:15px 0;"><b>省市代码(仅中国专利):</b></div>
+            <div v-html="changeRed('province')" style="display:flex;flex-wrap:wrap;line-height:1.5em;">
                
             </div>
-            <div><b>国别代码:</b></div>
-            <div style="display:flex;flex-wrap:wrap;justify-content: space-between;">
+            <div style="margin:15px 0;"><b>国别代码:</b></div>
+            <div style="display:flex;flex-wrap:wrap;justify-content: space-between;line-height:1.5em;">
                 <span v-for="(item) in countryList" :key="item.value" style="margin:0 10px;"><span class="red">{{ item.value }}</span><span style="margin-left:10px;">{{ item.label }}</span></span>
             </div>
         </div>
@@ -38,9 +50,11 @@
 </template>
 
 <script>
+import mixins from './mixins'
 export default {
     name:'AdvancedSearch',
   components: {},
+  mixins: [ mixins],
   props:['countryList','DBType','editData'],
   data() {
     return {
@@ -54,24 +68,95 @@ export default {
   
   created() {},
   mounted() {
-    this.field = [].concat(...this.field.map(item=>{return item.children}))
+    this.getField()
     if(this.editData && this.editData.component == 'AdvancedSearch'){
       if(this.editData.data){
         this.$set(this,'condition',this.editData.data)
-      }     
+      } 
+      this.initProject(this.editData.otherCondition)      
     }
   },
   methods: {
+    getField(){
+      var data = JSON.parse(JSON.stringify(this.$constants.searchField))
+      var fields = []
+      for(var i = 0;i<data.length;i++){
+        var item = data[i]
+        if(item.DBType.indexOf(this.DBType)==-1){
+          continue
+        }
+        for(var j = 0;j<item.children.length;j++){
+            var child = item.children[j]
+            if(child.DBType.indexOf(this.DBType)==-1){
+                continue;
+            }
+            fields.push(child)
+            if(child.after && child.after.length){
+                fields.push(...child.after)
+            }
+        }
+      }
+      this.field = fields
+    },
     changeRed(val){
         if(val == 'province'){
-            var str = ' 北京 12 天津 13 河北 14 山西 15 内蒙 21 辽宁 22 吉林 23 黑龙江 31 上海 32 江苏 33'
-                    +'浙江 34 安徽 35 福建 36 江西 37 山东 41 河南 42 湖北 43 湖南 44 广东 45 广西 51 四' 
-                    +'川 52 贵州 53 云南 54 西藏 61 陕西 62 甘肃 63 青海 64 宁夏 65 新疆 66 海南 71 台'
-                    +'湾 81 广州 83 武汉 85 重庆 87 西安 89 沈阳 91 大连 93 哈尔滨 94 深圳 95 青岛 97 宁'
-                    +'波 HK 香港'
-            var regx = new RegExp("[0-9A-Z]+", "g")
+            // var str = '11 北京 12 天津 13 河北 14 山西 15 内蒙 21 辽宁 22 吉林 23 黑龙江 31 上海 32 江苏 33'
+            //         +'浙江 34 安徽 35 福建 36 江西 37 山东 41 河南 42 湖北 43 湖南 44 广东 45 广西 51 四' 
+            //         +'川 52 贵州 53 云南 54 西藏 61 陕西 62 甘肃 63 青海 64 宁夏 65 新疆 66 海南 71 台'
+            //         +'湾 81 广州 83 武汉 85 重庆 87 西安 89 沈阳 91 大连 93 哈尔滨 94 深圳 95 青岛 97 宁'
+            //         +'波 HK 香港'
+            var obj = {
+                "11": "北京",
+                "12": "天津",
+                "13": "河北",
+                "14": "山西",
+                "15": "内蒙",
+                "21": "辽宁",
+                "22": "吉林",
+                "23": "黑龙江",
+                "31": "上海",
+                "32": "江苏",
+                "33": "浙江",
+                "34": "安徽",
+                "35": "福建",
+                "36": "江西",
+                "37": "山东",
+                "41": "河南",
+                "42": "湖北",
+                "43": "湖南",
+                "44": "广东",
+                "45": "广西",
+                "51": "四川",
+                "52": "贵州",
+                "53": "云南",
+                "54": "西藏",
+                "61": "陕西",
+                "62": "甘肃",
+                "63": "青海",
+                "64": "宁夏",
+                "65": "新疆",
+                "66": "海南",
+                "71": "台湾",
+                "81": "广州",
+                "83": "武汉",
+                "85": "重庆",
+                "87": "西安",
+                "89": "沈阳",
+                "91": "大连",
+                "93": "哈尔滨",
+                "94": "深圳",
+                "95": "青岛",
+                "97": "宁波",
+                "HK": "香港"
+            }
+            var str = ''
+            for(let key in obj){
+                str = str + `<span style="margin:0 10px;width:80px"><span style='color:red;'>${key}</span><span style="margin-left:10px">${obj[key]}</span></span>`
+            }
+            return str
         }
-        return "<span style='color:red'>11 </span>"+str.replace(regx,"<span style='color:red'>&nbsp;&nbsp; $& </span>")
+        return ''
+        // return str.replace(regx,"<div style='color:red;'>&nbsp;$& </div>")
     },
     cancel(){
         this.condition = ''
@@ -86,6 +171,14 @@ export default {
             component:'AdvancedSearch',
             data:a.trim()
         }
+        if(this.projectId){
+            params.otherCondition = {
+                projectId:this.projectId,
+                projectName:this.projectName,
+                show:`projectName=(${this.projectName})`,
+                search:`projectId=(${this.projectId})`
+            }
+        }
         this.$emit('search',a.trim(),params)
     },
   },

+ 11 - 16
src/views/components/import/conditionImport/FormSearch.vue

@@ -52,7 +52,7 @@
                                                 </div>
                                                 <!-- 专利数据库 -->
                                                 <div v-else-if="i.dataType==5" style="width:100%">
-                                                    <el-select v-model.number="form[i.value]" style="width:100%" filterable remote clearable placeholder="请选择" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod" @focus="remoteMethod('')">
+                                                    <el-select v-model.number="projectId" @change="changeProject" style="width:100%" filterable remote clearable placeholder="请选择" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod" @focus="remoteMethod('')">
                                                         <el-option
                                                             v-for="item in projectQuery.data"
                                                             :key="item.id"
@@ -153,7 +153,7 @@ export default {
             if(this.editData.data && this.editData.data.length>0){
                 this.form = this.customToForm(this.editData.data)
             }
-            
+            this.initProject(this.editData.otherCondition)  
         }
     },
     methods: {
@@ -222,19 +222,6 @@ export default {
                             }
                         }
                         else{
-                            // this.form[keys[i]].forEach((item,index)=>{
-                            //     if(index<this.form[keys[i]].length-1){
-                            //         str1 = str1 + keys[i] + '=' + item + ' AND '
-                            //     }else{
-                            //         str1 = str1 + keys[i] + '=' + item
-                            //     }
-                            // })
-                            // if(keys[i] == 'GJ'){
-                            //     var index = this.form.GJ.findIndex(item=>{return item == '-1'})
-                            //     if(index!=-1){
-                            //         this.form.GJ.splice(index,1)
-                            //     }
-                            // }
                             if(this.form[keys[i]].length>1){
                                 str1 = str1 + keys[i] + '=(' + this.form[keys[i]].join(" OR ") +')'
                             }else{
@@ -271,7 +258,15 @@ export default {
             var params = {
                 data:this.formToCustom(this.form),
                 DBType:this.DBType,
-                component:'FormSearch'
+                component:'FormSearch',
+            }
+            if(this.projectId){
+                params.otherCondition = {
+                    projectId:this.projectId,
+                    projectName:this.projectName,
+                    show:`projectName=(${this.projectName})`,
+                    search:`projectId=(${this.projectId})`
+                }
             }
             this.$emit('search',str,params)
         },

+ 350 - 0
src/views/components/import/conditionImport/components/searchHelp/components/searchField.vue

@@ -0,0 +1,350 @@
+<template>
+  <div v-if="data.length" class="search-helper-field height_100">
+    <div class="search-helper-field">
+        <section class="search-helper-left-nav" value="#hrefNumAndText">
+            <div v-for="(field,index) in data" :key="'field'+index" class="search-helper-left-nav__item" :class="field.value == currentField?'isActive':''" @click="changeGroup(field)">
+                <div v-if="index == 0" class="search-helper-left-nav__mask--top"></div> 
+                <div class="search-helper-left-nav__icon--circle"></div> 
+                <div class="search-helper-left-nav__icon--arrow"></div> 
+                <a>{{field.label}}</a>
+            </div>
+        </section>
+    </div>
+    <div ref="searchField" class="height_100 search-helper-right" >
+        <div v-for="(item) in data" :id="item.value" :key="item.label" class="search-helper-field__table">
+            <div :ref="item.value" class="title" :class="item.value == currentField?'isActive':''" >{{ item.label }}</div>
+            <table class="splitFourTds">
+                <thead>
+                    <tr>
+                        <td>字段缩写</td> 
+                        <td>字段名称</td> 
+                        <td>类型</td> 
+                        <td>检索范围</td> 
+                        <td>示例和备注</td>
+                    </tr>
+                </thead>
+                <tbody>
+                    <tr v-for="(child,index) in item.children" :key="child.value+index">
+                        <td>{{ child.value }}</td>
+                        <td>{{ child.label }}</td>
+                        <td>{{ child.type }}</td>
+                        <td>
+                            {{ getDBType(child.DBType)}}
+                        </td>
+                        <td><div v-html="examples[child.value]"></div></td>
+                    </tr>
+                </tbody>
+            </table>
+        </div>    
+    </div>
+    
+    
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {
+  },
+  data() {
+    return {
+        data:[],
+        currentField:'',
+        observer:null,
+        DBTypes:this.$constants.DBTypes,
+        isClick:true,
+        examples:{
+            TI:'TI=汽车',
+            CL:'CL=汽车',
+            ins:'ins=汽车',
+            TX:'TX=(汽车 and 座椅)',
+            AB:'AB=汽车',
+            AN:'AN=CN202411470542.5',
+            ANO:'ANO=CN202411470542.5',
+            PNO:'PNO=CN119073855A',
+            PN:'PN=CN119073855A',
+            PR:'PR=JP2013270967',
+            PCTAN:'PCTAN=US2017/023191',
+            PT:'PT=(1 OR 8)<br><div class="desc">1 OR 8: 发明专利,2 OR 9: 新型,3: 外观(注意:仅中国专利)</div>',
+            LG:'LG=1<div class="desc">1: 有效,2: 失效,3: 审中(注意:仅中国专利);</div>',
+            SS:'SS=1<div class="desc">1: 有效,2: 失效,3: 审中(注意:仅中国专利);</div>',
+            IC:'IC=A21B3/04',
+            MC:'MC=汽车',
+            IC1:'IC1=H',
+            IC2:'IC2=H04',
+            IC3:'IC3=H04W',
+            IC4:'IC4=A21B3',
+            LOC:'LOC=01-01',
+            LOC1:'LOC1=01',
+            CT:'CT=32D',
+            EC:'EC=32D',
+            AD:'AD=20010101<br>AD=2001~2002',
+            GD:'GD=20010101<br>AD=2001~2002',
+            PD:'PD=20010101<br>AD=2001~2002',
+            PRD:'PRD=20010101<br>AD=2001~2002',
+            IN:'IN=李书福',
+            FI:'FI=李书福',
+            PA:'PA=清华大学',
+            FP:'FP=清华大学',
+            PE:'PE=李书福',
+            AT:'AT=吴观乐',
+            AG:'AG=李书福',
+            AGN:'AGN=柳沈',
+            DZ:'DZ=北京',
+            ADD:'ADD=北京',
+            RDD:'RDD=北京',
+            CO:'CO=CN',
+            GJ:'GJ=CN',
+            CO:'CO=CN',
+            AAC:'AAC=CN',
+            ADP:'ADP=江苏',
+            ADC:'ADC=苏州',
+            ADD:'ADD=昆山',
+            DZ:'DZ=CN',
+            RDP:'RDP=江苏',
+            RDC:'RDC=苏州',
+            RDD:'RDD=昆山',
+            CC:'CC=US6394621B1',
+            UCC:'UCC=US6394621B1',
+        },
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    this.init()
+  },
+  beforeDestroy(){
+    if(this.observer){
+        this.observer.disconnect()
+    }
+  },
+  methods: {
+    addListen(){
+        var that = this
+        // 创建一个 Intersection Observer 实例
+        this.observer = new IntersectionObserver((entries, observer) => {
+            entries.forEach(entry => {
+                if (entry.isIntersecting && !that.isClick) {
+                    // 当元素进入视口时执行的逻辑
+                    var id = entry.target.getAttribute('id')
+                    that.currentField = id
+                    // 可以在这里执行懒加载、动画触发等操作
+                    // observer.unobserve(entry.target); // 如果只需要触发一次,可以取消观察
+                }
+            });
+        }, {
+            root: null, // null 表示视口
+            rootMargin: '0px',
+            threshold: 0.3 // 当元素 10% 进入视口时触发
+        });
+
+        // 选择需要观察的元素
+        const elements = this.$refs.searchField.childNodes;
+        elements.forEach(element => {
+            this.observer.observe(element);
+        });
+    },
+    init(){
+        var data = JSON.parse(JSON.stringify(this.$constants.searchField))
+        var fields = []
+        for(var i = 0;i<data.length;i++){
+            var item = data[i]
+            if(item.value == 'project'){
+                continue
+            }
+            var children = []
+            for(var j = 0;j<item.children.length;j++){
+                var child = item.children[j]
+                children.push(child)
+                if(child.after && child.after.length){
+                    children.push(...child.after)
+                }
+            }
+            if(children && children.length>0){
+                fields.push(
+                    {
+                        ...item,
+                        children:children
+                    }
+                )
+            }
+      }
+      this.data = fields
+      if(this.data.length){
+        this.$set(this,'currentField',this.data[0].value)
+      }
+      this.$nextTick(()=>{
+        this.addListen()
+      })
+      setTimeout(()=>{
+            this.isClick = false
+        },500)
+    },
+    changeGroup(field){
+        this.isClick = true
+        this.currentField = field.value
+        var dom = this.$refs[field.value]
+        dom[0].scrollIntoView(
+        {
+          behavior: "smooth",
+          block:'center'
+          // block:'nearest'
+        }
+      )
+      setTimeout(()=>{
+            this.isClick = false
+        },500)
+    },
+    getDBType(DBTypes){
+        return DBTypes.map(item=>{
+            return this.DBTypes[item]
+        }).join('、')
+    },
+  },
+};
+</script>
+<style lang="scss">
+    .search-helper-field{
+        .desc{
+            color:#1D8820;
+            font-size: 12px;
+            line-height: 16px;
+        }
+    }
+</style>
+<style lang="scss" scoped>
+
+.search-helper-field{
+    padding-top: 40px;
+    position: relative;
+    .search-helper-field{
+        position: absolute;
+        left: -146px;
+        top: 40px;
+        .search-helper-left-nav {
+            position: relative;
+            border-left: 2px solid #eee;
+            width: 144px;
+            display: inline-block;
+        }
+        .search-helper-left-nav__item {
+            position: relative;
+            padding: 2px 0 2px 12px;
+            font-size: 12px;
+            color: #061632;
+            line-height: 16px;
+            vertical-align: top;
+            margin-bottom: 12px;
+            &:last-child{
+                margin-bottom: 0;
+            }
+        }
+        .search-helper-left-nav__mask--top {
+            position: absolute;
+            top: 0;
+            left: -3px;
+            width: 4px;
+            height: 8px;
+            background: #fafbfc;
+            display: inline-block;
+        }
+        .search-helper-left-nav__icon--circle {
+            width: 10px;
+            height: 10px;
+            border-radius: 50%;
+            border: 2px solid #eee;
+            position: absolute;
+            left: -8px;
+            top: 5px;
+            background: #fff;
+            display: inline-block;
+        }
+        .search-helper-left-nav__icon--arrow {
+            background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAAG3/V4gAAAAAXNSR0IArs4c6QAAAIVJREFUGBlj0EwWessAAhpJQv8ZQQSYByTgHCYMEbgAA+M1uCxMkIn1fyhcL0iQmYEx8eq8twtQBEES3Cwc3Bjav/39OQ1FkJGR8dv1uW8TMLSDjIABkCImlv+mV2e+u4ZXIZKGhSjWwCSQaUag/7iY2bNYGBkZ3v3/zyCELAljw7wH4gMAgs0pM1pGtHgAAAAASUVORK5CYII=) no-repeat 50%;
+            width: 10px;
+            height: 8px;
+            position: absolute;
+            left: -5px;
+            top: 5px;
+            display: none;
+        }
+        .search-helper-left-nav__mask--bottom {
+            position: absolute;
+            bottom: 0;
+            left: -3px;
+            width: 4px;
+            height: calc(100% - 10px);
+            background: #fafbfc;
+        }
+        .isActive{
+            .search-helper-left-nav__icon--arrow {
+                display: inline-block;
+            }
+            .search-helper-left-nav__icon--circle {
+                display: none;
+            }
+            .search-helper-left-nav__icon--circle {
+                display: none;
+            }
+        } 
+    }
+    .isActive{
+        color:#286212 !important;
+    }
+    .search-helper-right{
+        overflow-y: auto;
+        -ms-overflow-style: none; /* IE 和 Edge */
+        scrollbar-width: none; /* Firefox */
+        &::-webkit-scrollbar {
+            display: none; /* Chrome, Safari, Opera */
+        }
+    }
+    .search-helper-field__table{
+        .title{
+            height: 30px;
+            line-height: 30px;
+            font-size: 16px;
+            color: #061632;
+            margin-bottom: 8px;
+            padding-left: 8px;
+            font-weight: 700;
+        }
+        table td {
+            padding: 8px;
+            border: 1px solid #eaeaea;
+            line-height: 24px;
+            vertical-align: top;
+            width:237px;
+            &:nth-child(1){
+                width: 120px;
+            }
+            &:nth-child(3){
+                width: 120px;
+            }
+        }
+        table tbody {
+            font-size: 14px;
+            color: #061632;
+        }
+        table {
+            width: 100%;
+            border-collapse: collapse;
+            border-spacing: 0;
+            margin-bottom: 40px;
+            thead{
+                background: #f4f5f7;
+                font-size: 16px;
+                color: #5e6c84;
+                td {
+                    font-weight: 700;
+                    border: 1px solid #f4f5f7;
+                    border-bottom: none;
+                }
+            }
+        }
+    }
+}
+</style>

+ 330 - 0
src/views/components/import/conditionImport/components/searchHelp/components/searchGrammar.vue

@@ -0,0 +1,330 @@
+<template>
+    <div v-if="data.length" class="search-helper-field height_100">
+      <div class="search-helper-field">
+          <section class="search-helper-left-nav" value="#hrefNumAndText">
+              <div v-for="(field,index) in data" :key="'field'+index" class="search-helper-left-nav__item" :class="field.value == currentField?'isActive':''" @click="changeGroup(field)">
+                  <div v-if="index == 0" class="search-helper-left-nav__mask--top"></div> 
+                  <div class="search-helper-left-nav__icon--circle"></div> 
+                  <div class="search-helper-left-nav__icon--arrow"></div> 
+                  <a>{{field.label}}</a>
+              </div>
+          </section>
+      </div>
+      <div ref="searchField" class="height_100 search-helper-right" >
+          <div v-for="(item) in data" :id="item.value" :key="item.label" class="search-helper-field__table">
+              <div :ref="item.value" class="title" :class="item.value == currentField?'isActive':''" >{{ item.label }}</div>
+              <table class="splitFourTds">
+                  <thead>
+                      <tr>
+                          <td>符号</td> 
+                          <td>作用</td> 
+                          <td>示例</td> 
+                      </tr>
+                  </thead>
+                  <tbody>
+                      <tr v-for="(child,index) in item.children" :key="child.value+index">
+                            <td>{{ child.value }}</td>
+                            <td>
+                                <div v-html="child.role"></div>
+                            </td>
+                            <td>
+                                <div v-html="child.example"></div>
+                            </td>
+                      </tr>
+                  </tbody>
+              </table>
+          </div>    
+      </div>
+      
+      
+    </div>
+</template>
+  
+<script>
+  export default {
+    components: {},
+    props: {
+    },
+    data() {
+      return {
+          data:[
+            {
+                label:'逻辑运算符',
+                value:'logicalOperator',
+                children:[
+                    {
+                        label: 'AND',
+                        value: 'AND',
+                        role:'要求符号两边的关键词同时存在,对位置顺序没有要求;<br>或者要求符号两边的搜索条件同时满足;<br>当关键词之间存在空格且不存在逻辑运算符时,进行AND操作',
+                        example:'太阳能 AND 电池<br>TI=纳米 AND PA=清华大学'
+                    },
+                    {
+                        label: 'OR',
+                        value: 'OR',
+                        role:'要求符号两边的关键词至少出现任意一个;<br>或者要求符号两边的搜索条件至少满足一个',
+                        example:'太阳能 OR 电池<br>TI=纳米 OR PA=清华大学'
+                    },
+                    {
+                        label: 'NOT',
+                        value: 'NOT',
+                        role:'要求排除符号后面的关键词;<br>或者要求匹配符号后面搜索条件的结果从匹配符号前面搜索条件的结果中排除;<br>逻辑运算符的优先级顺序为NOT>AND>OR,可以通过添加()的方式提高相应部分检索式的优先级。',
+                        example:'太阳能 NOT 电池<br>TI=纳米 NOT PA=清华大学'
+                    },
+                ]
+            },
+            {
+                label:'通配符',
+                value:'wildcard',
+                children:[
+                    {
+                        label: '*',
+                        value: '*',
+                        role:'代表0个或多个字符,可以用在关键词或号码的任意位置使用;<br>'
+                            +'在一个关键词中最多能用两个,且不能与其他通配符同时使用;<br>'
+                            +'用在关键词中间或末尾时,可以用于所有文本和号码类型字段,且*前需要保留2个以上的字符;<br>'
+                            +'不支持在引号中使用。',
+                        example:'*otor<br>electr*<br>小*车'
+                    },
+                ]
+            },
+            {
+                label:'位置符',
+                value:'position',
+                children:[
+                    {
+                        label: '$PREn',
+                        value: '$PREn',
+                        role:'两个限定位置顺序的关键词之间间隔不超过n个单词或汉字(0≤n≤99);<br>'
+                            +'位置符的优先级高于逻辑运算符',
+                        example:'data $PRE2 line<br>AB=(太阳能 $PRE2 电池 $PRE2 硅)'
+                    },
+                ]
+            },
+            {
+                label:'其他',
+                value:'other',
+                children:[
+                    {
+                        label: '()',
+                        value: '()',
+                        role:'将括号内的逻辑优先运算',
+                        example:'汽车 AND (发动机 OR 引擎)'
+                    },
+                    {
+                        label: '""',
+                        value: '""',
+                        role:'要求引号内的关键词位置顺序均固定;<br>'
+                            +'短语查询,固定引号内的关键词位置顺序',
+                        example:'"electric vehicle"'
+                    },
+                    {
+                        label: '特殊字符',
+                        value: '特殊字符',
+                        role:'特殊字符作为一个单独的字符支持检索',
+                        example:'AB=(85℃)'
+                    },
+                ]
+            },
+          ],
+          currentField:'',
+          observer:null,
+          isClick:true
+      };
+    },
+    watch: {},
+    computed: {},
+    created() {},
+    mounted() {
+      this.init()
+    },
+    beforeDestroy(){
+      if(this.observer){
+          this.observer.disconnect()
+      }
+    },
+    methods: {
+        addListen(){
+            var that = this
+            // 创建一个 Intersection Observer 实例
+            this.observer = new IntersectionObserver((entries, observer) => {
+                entries.forEach(entry => {
+                    if (entry.isIntersecting && !that.isClick) {
+                        // 当元素进入视口时执行的逻辑
+                        var id = entry.target.getAttribute('id')
+                        that.currentField = id
+                        // 可以在这里执行懒加载、动画触发等操作
+                        // observer.unobserve(entry.target); // 如果只需要触发一次,可以取消观察
+                    }
+                });
+            }, {
+                root: null, // null 表示视口
+                rootMargin: '0px',
+                threshold: 0.8 // 当元素 10% 进入视口时触发
+            });
+    
+            // 选择需要观察的元素
+            const elements = this.$refs.searchField.childNodes;
+            elements.forEach(element => {
+                this.observer.observe(element);
+            });
+        },
+        init(){
+            if(this.data.length){
+            this.$set(this,'currentField',this.data[0].value)
+            }
+            this.$nextTick(()=>{
+                this.addListen()
+            })
+            setTimeout(()=>{
+                this.isClick = false
+            },500)
+        },
+        changeGroup(field){
+            this.isClick = true
+            this.currentField = field.value
+            var dom = this.$refs[field.value]
+            dom[0].scrollIntoView(
+                {
+                    behavior: "smooth",
+                    block:'center'
+                    // block:'nearest'
+                }
+            )
+            setTimeout(()=>{
+                this.isClick = false
+            },500)
+        },
+    },
+  };
+  </script>
+  <style lang="scss" scoped>
+  .search-helper-field{
+      padding-top: 40px;
+      position: relative;
+      .search-helper-field{
+          position: absolute;
+          left: -146px;
+          top: 40px;
+          .search-helper-left-nav {
+              position: relative;
+              border-left: 2px solid #eee;
+              width: 144px;
+              display: inline-block;
+          }
+          .search-helper-left-nav__item {
+              position: relative;
+              padding: 2px 0 2px 12px;
+              font-size: 12px;
+              color: #061632;
+              line-height: 16px;
+              vertical-align: top;
+              margin-bottom: 12px;
+              &:last-child{
+                  margin-bottom: 0;
+              }
+          }
+          .search-helper-left-nav__mask--top {
+              position: absolute;
+              top: 0;
+              left: -3px;
+              width: 4px;
+              height: 8px;
+              background: #fafbfc;
+              display: inline-block;
+          }
+          .search-helper-left-nav__icon--circle {
+              width: 10px;
+              height: 10px;
+              border-radius: 50%;
+              border: 2px solid #eee;
+              position: absolute;
+              left: -8px;
+              top: 5px;
+              background: #fff;
+              display: inline-block;
+          }
+          .search-helper-left-nav__icon--arrow {
+              background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAAG3/V4gAAAAAXNSR0IArs4c6QAAAIVJREFUGBlj0EwWessAAhpJQv8ZQQSYByTgHCYMEbgAA+M1uCxMkIn1fyhcL0iQmYEx8eq8twtQBEES3Cwc3Bjav/39OQ1FkJGR8dv1uW8TMLSDjIABkCImlv+mV2e+u4ZXIZKGhSjWwCSQaUag/7iY2bNYGBkZ3v3/zyCELAljw7wH4gMAgs0pM1pGtHgAAAAASUVORK5CYII=) no-repeat 50%;
+              width: 10px;
+              height: 8px;
+              position: absolute;
+              left: -5px;
+              top: 5px;
+              display: none;
+          }
+          .search-helper-left-nav__mask--bottom {
+              position: absolute;
+              bottom: 0;
+              left: -3px;
+              width: 4px;
+              height: calc(100% - 10px);
+              background: #fafbfc;
+          }
+          .isActive{
+              .search-helper-left-nav__icon--arrow {
+                  display: inline-block;
+              }
+              .search-helper-left-nav__icon--circle {
+                  display: none;
+              }
+              .search-helper-left-nav__icon--circle {
+                  display: none;
+              }
+          } 
+      }
+      .isActive{
+          color:#286212 !important;
+      }
+      .search-helper-right{
+          overflow-y: auto;
+          -ms-overflow-style: none; /* IE 和 Edge */
+          scrollbar-width: none; /* Firefox */
+          &::-webkit-scrollbar {
+              display: none; /* Chrome, Safari, Opera */
+          }
+      }
+      .search-helper-field__table{
+          .title{
+              height: 30px;
+              line-height: 30px;
+              font-size: 16px;
+              color: #061632;
+              margin-bottom: 8px;
+              padding-left: 8px;
+              font-weight: 700;
+          }
+          table td {
+              padding: 8px;
+              border: 1px solid #eaeaea;
+              line-height: 24px;
+              vertical-align: top;
+              &:nth-child(1){
+                  width: 120px;
+              }
+              &:nth-child(3){
+                  width: 250px;
+              }
+          }
+          table tbody {
+              font-size: 14px;
+              color: #061632;
+          }
+          table {
+              width: 100%;
+              border-collapse: collapse;
+              border-spacing: 0;
+              margin-bottom: 40px;
+              thead{
+                  background: #f4f5f7;
+                  font-size: 16px;
+                  color: #5e6c84;
+                  td {
+                      font-weight: 700;
+                      border: 1px solid #f4f5f7;
+                      border-bottom: none;
+                  }
+              }
+          }
+      }
+  }
+  </style>

+ 26 - 0
src/views/components/import/conditionImport/components/searchHelp/index.vue

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

+ 71 - 0
src/views/components/import/conditionImport/components/searchHelp/searchHelp.vue

@@ -0,0 +1,71 @@
+<template>
+  <div class="searchHelp height_100">
+    <div class="title">
+        <p>搜索帮助</p>
+    </div>
+    <div class="content">
+        <el-tabs v-model="component" type="card">
+            <el-tab-pane label="可搜索字段" name="searchField"></el-tab-pane>
+            <el-tab-pane label="搜索语法" name="searchGrammar"></el-tab-pane>
+        </el-tabs>
+    </div>
+    <div class="content2 height_100">
+        <component :is='component'></component>
+    </div>
+    
+  </div>
+</template>
+
+<script>
+import searchField from './components/searchField.vue';
+import searchGrammar from './components/searchGrammar.vue';
+export default {
+  components: {
+    searchField,
+    searchGrammar
+  },
+  props: {},
+  data() {
+    return {
+        activeName:1,
+        component:'searchField',
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+  },
+};
+</script>
+<style lang="scss" scoped>
+.searchHelp{
+    width: 960px;
+    text-align: left;
+    margin: 0 auto;
+    .title{
+        padding: 20px 0;
+        &>p{
+            height: 40px;
+            line-height: 40px;
+            font-size: 32px;
+            font-weight: 400;
+            color: #616161;
+            margin:0 !important;
+        }
+    }
+    .content{
+        position:sticky;
+        top:0px;
+        background: white;
+        padding-top:10px ;
+        z-index: 999;
+    }
+    .content2{
+        position:sticky;
+        top:60px;
+        height:calc(100% - 200px)
+    }
+}
+</style>

+ 1 - 1
src/views/components/import/conditionImport/components/searchHistory/index.vue

@@ -18,7 +18,7 @@ export default {
   watch: {},
   computed: {
     noveltySearch(){
-      return this.$route.query.noveltySearch
+      return this.$route.query.noveltySearch=='true'?true:false
     },
     projectId(){
       return this.$route.query.projectId

+ 25 - 10
src/views/components/import/conditionImport/customSearch.vue

@@ -25,8 +25,8 @@
             <div>
                 <myFormSearch ref="myFormSearch" :list="(editData && editData.component == 'customSearch')?editData.data:list" :field="field" :searchValue="true" @search="search">
                   <template v-slot:default="scope">
-                    <div v-if="scope.row.field == 'projectId'" style="width:100%">
-                      <el-select v-model.number="scope.row.value" style="width:100%" size="small" filterable remote clearable placeholder="请选择" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod" @focus="remoteMethod('')">
+                    <div v-if="scope.row.field == 'projectName'" style="width:100%">
+                      <el-select v-model.number="projectId" @change="changeProject" style="width:100%" size="small" filterable remote clearable placeholder="请选择" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod" @focus="remoteMethod('')">
                         <el-option
                             v-for="item in projectQuery.data"
                             :key="item.id"
@@ -96,7 +96,11 @@ export default {
     if(this.editData && this.editData.component == 'customSearch'){
       if(this.editData.checkList){
         this.checkList = this.editData.checkList
-      }     
+      }
+      var obj = this.initProject(this.editData.otherCondition)  
+      if(obj && !this.editData.data.find(item=>{return item.field == 'projectName'})){
+        this.editData.data.push(obj)
+      }
     }
   },
   methods: {
@@ -126,13 +130,16 @@ export default {
         if(item.DBType.indexOf(this.DBType)==-1){
           continue
         }
-        var children = item.children.filter(child=>{
-          return child.value!='GJ' && child.DBType.indexOf(this.DBType)!=-1
-        })
-        if(this.DBType != 'CN' && this.DBType != 'WD'){
-          if(item.otherField && item.otherField.length>0){
-            children.push(...item.otherField)
-          }
+        var children = []
+        for(var j = 0;j<item.children.length;j++){
+            var child = item.children[j]
+            if(child.value=='GJ' || child.DBType.indexOf(this.DBType)==-1){
+                continue;
+            }
+            children.push(child)
+            if(child.after && child.after.length){
+              children.push(...child.after)
+            }
         }
         if(children && children.length>0){
           fields.push(
@@ -151,6 +158,14 @@ export default {
         DBType:this.DBType,
         component:'customSearch'
       }
+      if(this.projectId){
+        params.otherCondition = {
+            projectId:this.projectId,
+            projectName:this.projectName,
+            show:`projectName=(${this.projectName})`,
+            search:`projectId=(${this.projectId})`
+        }
+      }
       if(this.DBType == 'WD' && this.checkList.length>0){
         params.checkList = this.checkList
         if(val){

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

@@ -28,10 +28,10 @@ export default {
       return data
     },
     isEdit(){
-      return this.$route.query.isEdit
+      return this.$route.query.isEdit=='true'?true:false
     },
     noveltySearch(){
-      return this.$route.query.noveltySearch
+      return this.$route.query.noveltySearch=='true'?true:false
     },
     projectId(){
       return this.$route.query.projectId

+ 163 - 6
src/views/components/import/conditionImport/internal_search/filter_search.vue

@@ -4,7 +4,7 @@
         筛选条件
     </div>
     <div class="main">
-        <tab1 refs="tab1" :conditions="conditions"  v-bind="$attrs"></tab1>
+        <tab1 refs="tab1" :conditions="conditions"  v-bind="$attrs" :refreshOption="refreshOption" :field="field"></tab1>
     </div>
     <div class="head foot" @click="search">
         筛选
@@ -24,17 +24,174 @@ export default {
   data() {
     return {
         conditions:{},
-        // projectId:5503
+        // projectId:5503,
+        refreshOption:false,
+        field:[],
     };
   },
   watch: {},
   computed: {},
   created() {},
-  mounted() {},
+  mounted() {
+    this.getAllCountColumns()
+  },
   methods: {
+    // 获取所有的统计栏位
+    getAllCountColumns() {
+      let params = {
+      }
+      this.$api.getAllCountColumns(params).then(res => {
+        if (res.code == 200) {
+          
+          var data = res.data.data
+          var noCount = ['SAT','MAT','MIN','SRH','MRH','MUPC','MCPC']
+          var field = []
+          data.forEach(item => {
+            if(noCount.indexOf(item.field)!=-1){
+              return
+            }
+            if (item.filedKind == -1) {
+              item.value = item.field
+            }
+            field.push(item)
+          })
+          this.getField(field)
+        }
+      })
+    },
+    getField(field){
+      // var field = [
+      //     {
+      //         "name": "公开日",
+      //         "type": "DateTime",
+      //         "value": "PD",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "field": "PD",
+      //         "groupBy": "dateType"
+      //     },
+      //     {
+      //         "name": "申请日",
+      //         "type": "DateTime",
+      //         "value": "AD",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "field": "AD",
+      //         "groupBy": "dateType"
+      //     },
+      //     {
+      //         "name": "授权日",
+      //         "type": "DateTime",
+      //         "value": "GD",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "field": "GD",
+      //         "groupBy": "dateType"
+      //     },
+      //     {
+      //         "name": "申请人",
+      //         "type": "Array",
+      //         "value": "PA",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "defaultShowStats": true,
+      //         "field": "PA",
+      //         "groupBy": "company"
+      //     },
+      //     {
+      //         "name": "法律状态",
+      //         "type": "String",
+      //         "value": "SS",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "field": "SS",
+      //         "groupBy": "typeStatus",
+      //         "optionValue": [
+      //             {
+      //                 "label": "有效",
+      //                 "value": "1"
+      //             },
+      //             {
+      //                 "label": "无效",
+      //                 "value": "2"
+      //             },
+      //             {
+      //                 "label": "审中",
+      //                 "value": "3"
+      //             }
+      //         ]
+      //     },
+      //     {
+      //         "name": "IPC分类号",
+      //         "type": "Object",
+      //         "value": "MIPC",
+      //         "ifStats": true,
+      //         "ifGroup": true,
+      //         "filedKind": -1,
+      //         "field": "MIPC",
+      //         "groupBy": "classify",
+      //         "children": [
+      //             {
+      //                 "label": "IPC部",
+      //                 "type": "1",
+      //                 "value": "IC1",
+      //                 "group": "nos"
+      //             },
+      //             {
+      //                 "label": "IPC大类",
+      //                 "type": "1",
+      //                 "value": "IC2",
+      //                 "group": "nos"
+      //             },
+      //             {
+      //                 "label": "IPC小类",
+      //                 "type": "1",
+      //                 "value": "IC3",
+      //                 "group": "nos"
+      //             },
+      //             {
+      //                 "label": "IPC大组",
+      //                 "type": "1",
+      //                 "value": "IC4",
+      //                 "group": "nos"
+      //             },
+      //             {
+      //                 "label": "IPC",
+      //                 "type": "1",
+      //                 "value": "IC",
+      //                 "group": "nos"
+      //             }
+      //         ]
+      //     }
+      // ]
+      field.forEach(item=>{
+        if(item.children && item.children.length>0){
+          this.$set(item, 'select', item.children[0].value)
+        }
+      })
+      this.field = field
+      this.$store.commit('SET_SYSTEM_FIELD',field)
+    },
     search(){
         // var data = this.$refs.tab1.getConditions()
-        console.log(this.conditions)
+        var data = Object.values(this.conditions)
+        if(data.length>0){
+          this.$emit('customTab', data)
+        }else{
+          this.$message.warning('没有选择筛选条件')
+        }
+        
+    },
+    refreshOptions(){
+      this.refreshOption= true
+      this.$nextTick(()=>{
+        this.refreshOption = false
+      })
     },
   },
 };
@@ -42,7 +199,7 @@ export default {
 <style lang="scss" scoped>
 .filter_search{
     .head{
-        height: 30px;
+        // height: 30px;
         padding: 15px;
         background: var(--bg);
         color: var(--color);
@@ -53,7 +210,7 @@ export default {
     }
     .main{
         height: calc(100% - 140px);
-        padding: 10px 0;
+        padding: 10px;
         overflow-x: hidden;
         overflow-y: auto;
         -ms-overflow-style: none; /* IE 和 Edge */

+ 140 - 0
src/views/components/import/conditionImport/internal_search/indexMixins.js

@@ -0,0 +1,140 @@
+
+
+export default{
+    methods: {
+        //图表分析
+        async handleAnalyses() {
+            var params = {
+                condition: this.condition.searchCondition || '',//检索条件
+                customFields:  [],
+                groupField:null,
+                orderDTOList: [
+                    {
+                        orderBy:this.queryParams.OrderBy,
+                        orderType:this.queryParams.OrderByType == 'DESC'?1:0
+                    }
+                ],//排序信息
+                projectId:null
+            }
+            const router = this.$router.resolve({
+                path: '/customChart',
+                query: {
+                    projectId: null,
+                    search:JSON.stringify(params),
+                    patentNum:this.total
+                }
+            })
+            window.open(router.href, '_blank');
+        },
+        //导出专利
+        async handleExport(val) {
+            if (val) {
+                if ( this.endNumber < 1 && this.queryParams.isAdd.length == 0) {
+                    this.$message.error('请先选择专利')
+                    return false
+                }
+            }
+            let obj = {
+                isAdd: this.queryParams.isAdd,
+                isDelete: this.queryParams.isDelete,
+                startNumber: this.startNumber,
+                endNumber: this.endNumber,
+                searchQuery: this.condition.searchCondition || '',//检索条件
+                customFields:  [],
+                groupField:null,
+                orderDTOList:[
+                    {
+                        orderBy:this.queryParams.OrderBy,
+                        orderType:this.queryParams.OrderByType == 'DESC'?1:0
+                    }
+                ],
+            }
+            if (!val) {
+                // 如果是导出全部,endNumber是当前的全部专利
+                obj.endNumber=this.total
+            }
+            let router = this.$router.resolve({
+            path: '/exportPatent',
+            query: {
+                projectId: null,
+                condition: JSON.stringify(obj)
+            }
+            })
+            window.open(router.href, '_blank')
+        },
+        //PDF首页导出
+        exportPDF(sign) {
+            if (sign) {
+                if ( this.endNumber < 1 && this.queryParams.isAdd.length == 0) {
+                    this.$message.error('请先选择专利')
+                    return false
+                }
+            }
+            if(sign){
+            var params = {
+                projectId: null,
+                isAdd: this.queryParams.isAdd,
+                isDelete: this.queryParams.isDelete,
+                startNumber: this.startNumber,
+                endNumber: this.endNumber,
+                searchQuery: this.condition.searchCondition || '',//检索条件
+                customFields:  [],
+                groupField:null,
+                orderDTOList:[
+                    {
+                        orderBy:this.queryParams.OrderBy,
+                        orderType:this.queryParams.OrderByType == 'DESC'?1:0
+                    }
+                ],
+            }
+            }else{
+            var params = {
+                projectId: null,
+                searchQuery: this.condition.searchCondition || '',//检索条件
+                customFields:  [],
+                groupField:null,
+                orderDTOList:[
+                    {
+                        orderBy:this.queryParams.OrderBy,
+                        orderType:this.queryParams.OrderByType == 'DESC'?1:0
+                    }
+                ],
+                isAdd: [],
+                isDelete: [],
+                startNumber: 1,
+                endNumber: this.total,//默认是当前全部
+            }
+            }
+            
+            this.$api.exportPDFFirstPage(params).then(res => {
+            if (res.code == 200) {
+                const h = this.$createElement;
+                this.$msgbox({
+                title: '提示',
+                message: h('p', null, [
+                    h('span', null, '任务正在导入,查看任务进度请前往 '),
+                    h('span', {
+                    style: 'color: #ff7d38;cursor: pointer;',
+                    // on: {
+                    //     click: () => {//
+                    //     let router = this.$router.resolve({
+                    //         path: '/taskList',
+                    //         query: {
+                    //         importToId: null,
+                    //         }
+                    //     })
+                    //     window.open(router.href, '_blank')
+                    //     this.$msgbox.close(false)
+                    //     }
+                    // }
+                    }, '立即前往',)
+                ]),
+                type: 'warning',
+                showConfirmButton: false,
+                }).then(action => {
+                });
+            }
+            })
+        },
+    },
+}

+ 17 - 109
src/views/components/import/conditionImport/internal_search/mixins.js

@@ -22,121 +22,29 @@ export default{
         groupField:{
           default:''
         },
+        refreshOption:{
+          type:Boolean,
+          default:false
+        },
+        field:{
+          type:Array,
+          default:()=>{
+            return []
+          }
+        }
       },
     data() {
         return {
             activeNames:[],
-            field:[
-                {
-                    "name": "公开日",
-                    "type": "DateTime",
-                    "value": "PD",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "field": "PD",
-                    "groupBy": "dateType"
-                },
-                {
-                    "name": "申请日",
-                    "type": "DateTime",
-                    "value": "AD",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "field": "AD",
-                    "groupBy": "dateType"
-                },
-                {
-                    "name": "授权日",
-                    "type": "DateTime",
-                    "value": "GD",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "field": "GD",
-                    "groupBy": "dateType"
-                },
-                {
-                    "name": "申请人",
-                    "type": "Array",
-                    "value": "PA",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "defaultShowStats": true,
-                    "field": "PA",
-                    "groupBy": "company"
-                },
-                {
-                    "name": "法律状态",
-                    "type": "String",
-                    "value": "SS",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "field": "SS",
-                    "groupBy": "typeStatus",
-                    "optionValue": [
-                        {
-                            "label": "有效",
-                            "value": "1"
-                        },
-                        {
-                            "label": "无效",
-                            "value": "2"
-                        },
-                        {
-                            "label": "审中",
-                            "value": "3"
-                        }
-                    ]
-                },
-                {
-                    "name": "IPC分类号",
-                    "type": "Object",
-                    "value": "MIPC",
-                    "ifStats": true,
-                    "ifGroup": true,
-                    "filedKind": -1,
-                    "field": "MIPC",
-                    "groupBy": "classify",
-                    "children": [
-                        {
-                            "label": "IPC部",
-                            "type": "1",
-                            "value": "IC1",
-                            "group": "nos"
-                        },
-                        {
-                            "label": "IPC大类",
-                            "type": "1",
-                            "value": "IC2",
-                            "group": "nos"
-                        },
-                        {
-                            "label": "IPC小类",
-                            "type": "1",
-                            "value": "IC3",
-                            "group": "nos"
-                        },
-                        {
-                            "label": "IPC大组",
-                            "type": "1",
-                            "value": "IC4",
-                            "group": "nos"
-                        },
-                        {
-                            "label": "IPC",
-                            "type": "1",
-                            "value": "IC",
-                            "group": "nos"
-                        }
-                    ]
-                }
-            ],
         }
     },
+    watch:{
+      refreshOption(val){
+        if(val){
+          this.refreshOptions()
+        }
+      },
+    },
     methods: {
         //刷新栏位
         async refreshField(){

+ 278 - 45
src/views/components/import/conditionImport/internal_search/searchResult_internal.vue

@@ -3,15 +3,61 @@
   <div style="background: white; height: 100%" >
     <el-container>
       <el-aside width="300px">
-        <filter_search :searchOption="condition.searchCondition" :customFields="customFields" :projectId="conditionObj.projectId?conditionObj.projectId[0]:undefined"></filter_search>
+        <filter_search ref="filter_search" @customTab="handleCustomFields" :searchOption="condition.searchCondition" :customFields="customFields" :projectId="conditionObj.projectId?conditionObj.projectId[0]:undefined"></filter_search>
       </el-aside>
       <el-container>
         <el-header style="height:auto !important;padding:0 !important;">
           <div style="width:100%">
-            <div style="margin-top: 0px;display: flex;align-items: center;" v-if="condition.component != 'patentNoSearch'">
+            <div class="display_flex" style="margin-top: 0px;" v-if="condition.component != 'patentNoSearch'">
               <search :field="field" :searchResult="true" :searchValue="false" :countryList="queryParams.countryList"
                 @search="search"></search>
-              <p><el-link style="width: 50px;color: #409EFF;" @click="searches">检索式</el-link></p>
+              <div class="display_flex" style="width:calc(100% - 550px);">
+                <myTooltip :content="condition.showCondition" effect="light">
+                  <div class="noWrap margin-right_10" style="max-width:calc(100% - 50px)">
+                    <span v-if="condition.showCondition">检索式:</span>{{condition.showCondition}}
+                  </div>
+                </myTooltip>
+                <div>
+                  <el-dropdown trigger="click">
+                    <span class="el-dropdown-link">
+                        <i class="el-icon-more"></i>
+                    </span>
+                    <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item @click.native.prevent="editSearchCondition">
+                            编辑
+                        </el-dropdown-item>
+                        <el-dropdown-item @click.native.prevent="searchFinish">
+                            检索
+                        </el-dropdown-item>
+                        <!-- <el-dropdown-item v-if="condition.reportType==1||condition.reportType == 2||condition.reportType == 3" @click.native.prevent="saveSearchCondition">
+                          保存检索式
+                        </el-dropdown-item> -->
+                    </el-dropdown-menu>
+                </el-dropdown>
+                </div>
+              </div>
+            </div>
+            <div v-if="filterConditions.length>0" class="display_flex filterCondition">
+              <div class="label">筛选条件:</div>
+              <div class="content">
+                <span class="margin-right_10" v-for="(item,index) in filterConditions" :key="index">
+                  <span v-if="index>0"> AND </span>
+                  <span style="font-weight:bold">{{ item.field.show }}<i class="el-icon-close" @click="delFilterCondition({type:2,index:index})" style="cursor: pointer;"></i>:</span>
+                  <span>
+                    <span v-for="(tag,ind) in item.value" :key="'tag'+ind">
+                      <span v-if="ind>0"> OR </span>
+                      <el-tag
+                        closable
+                        size="small"
+                        :disable-transitions="false"
+                        @close="delFilterCondition({type:1,data:item.value,index:ind,parentIndex:index})">
+                        {{tag.show}}
+                      </el-tag>
+                    </span>
+                  </span>
+                  
+                </span>
+              </div>
             </div>
             <menuInRow>
               <menu-in-row-item v-for="item in viewList" :key="item.value" :name="item.value" @click="handleChangeView(item)">
@@ -20,7 +66,10 @@
                   <span class="margin-left_5" :style="viewSelected === item.value ?'color:red':''">{{item.title}}</span>
                 </div>
               </menu-in-row-item>
-              <menu-in-row-item name="handleAnalyses">
+              <menu-in-row-item>
+                <div>|</div>
+              </menu-in-row-item>
+              <menu-in-row-item name="handleAnalyses" @click="handleAnalyses">
                 <div>
                   <svg-icon icon-class="图表分析"></svg-icon>
                   <span class="margin-left_5">图表分析</span>
@@ -28,8 +77,14 @@
               </menu-in-row-item>
               <menu-in-row-item name="highlight">
                 <div>
-                  <svg-icon icon-class="wodegaoliang"></svg-icon>
-                  <span class="margin-left_5">高亮</span>
+                  <el-popover placement="bottom" title="关键词高亮" width="320" trigger="click">
+                    <patent-keywords-highlight :project-id="projectId" />
+                    <div slot="reference" >
+                      <svg-icon icon-class="wodegaoliang"></svg-icon>
+                      <span class="margin-left_5">高亮</span>
+                      <i class="el-icon-arrow-down el-icon--right"></i>
+                    </div>
+                  </el-popover>
                 </div>
               </menu-in-row-item>
               <menu-in-row-item name="fieldManage" @click="handleFieldManage">
@@ -38,19 +93,51 @@
                   <span class="margin-left_5">显示栏位管理</span>
                 </div>
               </menu-in-row-item>
-              <menu-in-row-item name="exportPatent">
+                <menu-in-row-item v-if="condition.reportType==1||condition.reportType == 2||condition.reportType == 3" name="saveCondition" @click="saveSearchCondition">
+                  <div>
+                    <svg-icon icon-class="保存检索式"></svg-icon>
+                    <span class="margin-left_5">保存检索式</span>
+                  </div>
+                </menu-in-row-item>
+              
+              <menu-in-row-item>
+                <div>|</div>
+              </menu-in-row-item>
+              <menu-in-row-item name="exportPatent" @click.native="handleExport(selectedTotal>0?true:false)">
                 <div>
                   <svg-icon icon-class="daochu"></svg-icon>
                   <span class="margin-left_5">专利导出</span>
+                  <!-- <el-dropdown trigger="hover" placement="bottom-start">
+                    <div>
+                      <svg-icon icon-class="daochu"></svg-icon>
+                      <span class="margin-left_5">专利导出</span>
+                      <i class="el-icon-arrow-right el-icon--right"></i>
+                    </div>
+                    <el-dropdown-menu slot="dropdown">
+                      <el-dropdown-item @click.native="handleExport(false)">当前全部</el-dropdown-item>
+                      <el-dropdown-item @click.native="handleExport(true)">当前所选</el-dropdown-item>
+                    </el-dropdown-menu>
+                  </el-dropdown> -->
                 </div>
               </menu-in-row-item>
-              <menu-in-row-item name="exportPDF">
+              <menu-in-row-item name="exportPDF" @click.native="exportPDF(selectedTotal>0?true:false)">
                 <div>
                   <svg-icon icon-class="daochu"></svg-icon>
                   <span class="margin-left_5">PDF首页导出</span>
+                  <!-- <el-dropdown trigger="hover" placement="left-start">
+                    <div>
+                      <svg-icon icon-class="daochu"></svg-icon>
+                      <span class="margin-left_5">PDF首页导出</span>
+                      <i class="el-icon-arrow-right el-icon--right"></i>
+                    </div>
+                    <el-dropdown-menu slot="dropdown">
+                      <el-dropdown-item @click.native="exportPDF(false)">当前全部</el-dropdown-item>
+                      <el-dropdown-item @click.native="exportPDF(true)">当前所选</el-dropdown-item>
+                    </el-dropdown-menu>
+                  </el-dropdown> -->
                 </div>
               </menu-in-row-item>
-              <menu-in-row-item name="importPatent">
+              <menu-in-row-item name="importPatent" @click="importToProject">
                 <div>
                   <svg-icon icon-class="daoru"></svg-icon>
                   <span class="margin-left_5">导入到项目</span>
@@ -61,12 +148,15 @@
           </div>
           
         </el-header>
-        <el-main id="patent-list-container" v-loading="loading">
-          <div class="height_100">
-            <component ref="patentViewList" :is="viewSelected" :semanteme="semanteme" :outside="outside" :retrieveRecordId="retrieveRecordId"  :noveltySearch="noveltySearch" :column="columnList" :tableData="tableData"  @clickPatentNo="handleClick" :canSort="condition.component != 'patentNoSearch'?true:false"
-              @select-change="handleSelect" :selected.sync="queryParams.selected" :queryParams="queryParams" :patentNoList.sync="patentNoList" :refresh='true'
-              :view-field="patentViewField" @on-sort="handleSort" @addSelect="getChoosePatentNo" :projectId="projectId" :contrastFileList="saveRemarkList" @saveRemark="saveRemark" :conditionObj="conditionObj"></component>
+        <el-main v-loading="loading" style="padding: 0 !important;">
+          <div class="patent-list-container">
+            <div class="height_100"> 
+              <component ref="patentViewList" :is="viewSelected" :semanteme="semanteme" :outside="outside" :retrieveRecordId="retrieveRecordId"  :noveltySearch="noveltySearch" :column="columnList" :tableData="tableData"  @clickPatentNo="handleClick" :canSort="condition.component != 'patentNoSearch'?true:false"
+                @select-change="handleSelect" :selected.sync="queryParams.selected" :queryParams="queryParams" :patentNoList.sync="patentNoList" :refresh='true'
+                :view-field="patentViewField" @on-sort="handleSort" @addSelect="getChoosePatentNo" :projectId="projectId" :contrastFileList="saveRemarkList" @saveRemark="saveRemark" :conditionObj="conditionObj"></component>
+            </div>
           </div>
+          
         </el-main>
         <el-footer class="workspace-content-patent-page foot-total">
           <div>
@@ -98,22 +188,6 @@
     <!-- <projectListDialog ref="projectListDialog" :importData="searchData"></projectListDialog> -->
     <projectListDialog ref="projectListDialog" :importData="condition"></projectListDialog>
 
-    <el-dialog custom-class="checkCondition" title="查看/编辑检索式" :visible.sync="visible" width="500px"
-      :before-close="() => { visible = false }" :close-on-click-modal="false" append-to-body>
-      <div>
-        <el-input type="textarea" readonly :rows="4" v-model="condition.searchCondition"></el-input>
-      </div>
-      <span slot="footer" class="dialog-footer footer2">
-        <div>
-          <el-button @click="editSearchCondition">编 辑</el-button>
-        </div>
-        <div>
-          <el-button @click="visible = false">取 消</el-button>
-          <el-button type="primary" @click="searchFinish">检 索</el-button>
-          <el-button type="primary" v-if="condition.reportType==1||condition.reportType == 2||condition.reportType == 3" @click="saveSearchCondition">保存检索式</el-button>
-        </div>
-      </span>
-    </el-dialog>
     <addAndEditSearchRecords ref="addAndEditSearchRecords" :projectId="condition.importToId"></addAndEditSearchRecords>
     <inventionPointDialog v-if="noveltySearch" :projectId="projectId" :retrieveRecordId="retrieveRecordId"  :contrastFileList="saveRemarkList" @updateInventionPoint="getPatentSimilarMess"></inventionPointDialog>
     <reportTemplateDialog ref="reportTemplateDialog"></reportTemplateDialog>
@@ -134,6 +208,9 @@ import reportTemplateDialog from '@/views/noveltySearch/components/dialog/report
 
 
 import filter_search from './filter_search.vue';
+
+import PatentKeywordsHighlight from '@/views/project/components/PatentKeywordsHighlight.vue'
+import indexMixins from './indexMixins'
 export default {
   components: {
     PatentTableListView,
@@ -144,8 +221,10 @@ export default {
     search,
     addAndEditSearchRecords,
     reportTemplateDialog,
-    filter_search
+    filter_search,
+    PatentKeywordsHighlight
   },
+  mixins:[indexMixins],
   props: {
     searchData: {},
     noveltySearch:{},
@@ -207,11 +286,10 @@ export default {
       quickSelectArr: [],
       /**检索式 */
       // 公用数据
-      field: JSON.parse(JSON.stringify(this.$constants.searchField)),
-      // 打开弹窗
-      visible: false,
+      field: [],
       // 检索式及其他信息
       condition: this.searchData,
+      filterConditions:[],
       conditionObj:{},
       saveRemarkList:[],
       customFields:[],
@@ -234,6 +312,8 @@ export default {
   },
   created() { },
   async mounted() {
+    this.condition.originalCondition = this.condition.searchCondition
+    this.getField()
     this.columnList = await this.$commonJS.getCustomField('patent',{ projectId: 0, taskId: null })
     if(this.noveltySearch){
       this.queryComparePatent()
@@ -246,16 +326,46 @@ export default {
 
   },
   methods: {
+    getField(){
+      var params = this.$s.getSession('conditionImport')
+      var DBType = 'CN'
+      if(params && params.data && params.data.DBType){
+        DBType = params.data.DBType
+      }
+      var data = JSON.parse(JSON.stringify(this.$constants.searchField))
+      var fields = []
+      for(var i = 0;i<data.length;i++){
+        var item = data[i]
+        if(item.DBType.indexOf(DBType)==-1 || item.value == 'project'){
+          continue
+        }
+        var children = item.children.filter(child=>{
+          return child.value!='GJ' && child.DBType.indexOf(DBType)!=-1
+        })
+        if(DBType != 'CN' && DBType != 'WD'){
+          if(item.otherField && item.otherField.length>0){
+            children.push(...item.otherField)
+          }
+        }
+        if(children && children.length>0){
+          fields.push(
+            {
+              ...item,
+              children:children
+            }
+          )
+        }
+      }
+      this.field = fields
+    },
     //解析检索式
     analyzingCondition(){
       if(this.condition && this.condition.searchCondition){
         var conditionObj = this.$commonJS.extractFieldsAndValues(this.condition.searchCondition)
         this.conditionObj = conditionObj
+        console.log(conditionObj)
       }
     },
-    clickFun(item){
-      console.log(item)
-    },
     //查询对比文件
     queryComparePatent(){
       var params = {
@@ -325,6 +435,56 @@ export default {
         }
       )
     },
+    // 统计组件传的值
+    handleCustomFields(val) {
+      this.filterConditions.push(...val)
+      var str = this.getConditionStrByCount(val)
+      this.condition.searchCondition = `${this.condition.searchCondition} AND ${str}`
+      this.searchBth()
+      this.refreshCount()
+    },
+    //统计格式的条件转检索式
+    getConditionStrByCount(val){
+      var str = ''
+      val.forEach((item,index)=>{
+        var value = ''
+        if(item.op == '≡'){
+          value = item.value.map(value=>`"${value.search}"`).join(" OR ")
+        }else if(item.op == '='){
+          value = item.value.map(value=>value.search).join(" OR ")
+        }
+        str = str + `${item.field.search} ${item.op} (${value})`
+        if(index > 0 && index < val.length){
+          str = str + ' AND '
+        }
+      })
+      return str
+    },
+    //删除筛选条件
+    delFilterCondition(obj){
+      const {type,index} = obj
+      if(type == 1){
+        var data = obj.data
+        if(data.length == 1){
+          var parentIndex = obj.parentIndex
+          this.filterConditions.splice(parentIndex,1)
+        }else{
+          data.splice(index,1)
+        }
+      }else{
+        this.filterConditions.splice(index,1)
+      }
+      var str = this.getConditionStrByCount(this.filterConditions)
+      this.condition.searchCondition = `${this.condition.originalCondition}` + (str?` AND ${str}`:'')
+      this.searchBth()
+      this.refreshCount()
+    },
+    //刷新统计数据
+    refreshCount(){
+      if(this.condition.DBType!='CN' && this.condition.DBType!='WD'){
+        this.$refs.filter_search.refreshOptions()
+      }
+    },
     //子组件返回检索式 
     async search(val) {
       if (val.searchStr == '') {
@@ -333,12 +493,67 @@ export default {
       }
       if (val.isRepeat) {
         this.condition.searchCondition = `${this.condition.searchCondition} AND ${val.searchStr}`
+        // this.condition.showCondition = `${this.condition.showCondition} AND ${val.searchStr}`
+        this.getFilterCondition(val)
       } else {
-        this.condition.searchCondition = val.searchStr
+        var searchStr = val.searchStr
+        if(this.condition.DBType == 'inner_CN'){
+          searchStr = searchStr + ' AND CO=CN'
+        }
+        this.condition.searchCondition = searchStr
+        this.condition.showCondition = searchStr
+        this.condition.originalCondition = searchStr
+        this.changeOriginalCondition(val)
+      }
+      this.refreshCount()
+      this.searchBth()
+      
+    },
+    //获取筛选条件(二次检索)
+    getFilterCondition(val){
+      var data = []
+      if(val.data){
+        val.data.forEach(item=>{
+          var value = []
+          if(typeof item.value == 'object'){
+            for(var i = 0;i<item.value.length;i++){
+              value.push(
+                {
+                  search: item.value[i],
+                  show: item.show.value[i]
+                }
+              )
+            }
+          }else{
+            value.push(
+              {
+                search: item.value,
+                show: item.show.value
+              }
+            )
+          }
+          var obj = {
+            field:{
+              search: item.field,
+              show: item.show.label
+            },
+            op: "=",
+            value:value
+          }
+          data.push(obj)
+        })
       }
+      this.filterConditions.push(...data)
+    },
+    //修改原始检索条件
+    changeOriginalCondition(val){
       if(val.data){
         var params = this.$s.getSession('conditionImport')
-        if(params && params.data && params.data.component != 'AdvancedSearch' && params.data.component != 'patentNoSearch'){
+        if(!params || !params.data){
+          return
+        }
+        params.data.otherCondition = null
+        if(params.data.component != 'AdvancedSearch' && params.data.component != 'patentNoSearch'){
           if(val.isRepeat){
             if(params.data.data && params.data.data.length>0){
               params.data.data.push(val.data[0])
@@ -369,7 +584,6 @@ export default {
           this.$s.setSession('conditionImport',params)
         }
       }
-      await this.searchBth()
     },
     //编辑检索式,跳转到检索界面
     editSearchCondition(){
@@ -391,6 +605,7 @@ export default {
           importData:JSON.stringify(this.searchData),
           noveltySearch:this.noveltySearch,
           projectId:this.projectId,
+          defaultSearchDB:params.data.defaultSearchDB?JSON.stringify(params.data.defaultSearchDB):undefined
         }
       })
     },
@@ -399,20 +614,21 @@ export default {
         this.queryParams.retrieveRecordId = null
       }
       this.queryParams.current = 1
+      //解析检索式
+      this.analyzingCondition()
       this.getList()
       if(this.outside){
         this.reLoadQuery()
       }
       
     },
-    // 打开检索式弹窗
-    searches() {
-      this.visible = true
-    },
+
     // 编辑、查看检索式
     async searchFinish() {
+      this.filterConditions = []
+      this.condition.searchCondition = this.condition.originalCondition
+      this.refreshCount()
       await this.searchBth()
-      this.visible = false
     },
     //导入到专题库
     importToProject() {
@@ -938,6 +1154,23 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
+.filterCondition{
+  padding: 10px 20px;
+  .label{
+    min-width: 80px;
+  }
+  .content{
+    width:100%;
+    font-size: 14px;
+    padding: 10px;
+    border: 1px solid var(--bg);
+    border-radius: 8px;
+  }
+}
+.display_flex{
+  display: flex;
+  align-items: center;
+}
 .footer2{
   display: flex;
   justify-content: space-between;

+ 41 - 0
src/views/components/import/conditionImport/mixins.js

@@ -11,9 +11,50 @@ export default{
                 loading:false,
                 data:[]
             },
+            projectId:null,
+            projectName:null,
         }
     },
     methods:{
+        initProject(data){
+            if(data){
+                this.$set(this,'projectId',data.projectId)
+                // this.projectId = data.projectId
+                this.projectName = data.projectName
+                this.getProjectQuery(this.projectId)
+                return {
+                    "field": "projectName",
+                    "logical": "AND",
+                    "operator": "=",
+                    "dataType": 1,
+                    "placeholder": "请选择",
+                    "show": {
+                        "label": "专利数据库"
+                    }
+                }
+            }
+            return null
+        },
+        changeProject(value){
+            if(!value){
+                this.projectName = null
+                return
+            }
+            var obj = this.projectQuery.data.find(item=>{
+                return item.id == this.projectId
+            })
+            if(obj){
+                this.projectName = obj.name
+            }
+        },
+        getProjectQuery(id){
+            var obj = this.projectQuery
+            obj.data=[]
+            obj.queryParams.current = 1
+            obj.id = id
+            obj.name = ''
+            this.getProject()
+        },
         //懒加载事件
         lazyLoading(){
             var obj = this.projectQuery

+ 44 - 6
src/views/components/import/conditionImport/search.vue

@@ -5,7 +5,12 @@
                 <div class="type">
                     <el-radio-group v-model="DBType">
                         <template v-for="type in defaultSearchDB" >
-                            <el-radio v-if="searchDB[type]" :key="type" :label="type">{{searchDB[type]}}</el-radio>
+                            <el-radio v-if="searchDB[type]" :key="type" :label="type">
+                                {{searchDB[type]}}
+                                <el-tooltip v-if="type=='inner_WD'" class="item" effect="dark" content="内部数据不是全部数据,是所有抓取过的数据" placement="top">
+                                    <i class="el-icon-warning"></i>
+                                </el-tooltip>
+                            </el-radio>
                         </template>
                         
                         <!-- <el-radio label="CN">中国专利检索</el-radio>
@@ -30,9 +35,19 @@
                   <el-link :type="isComponent === 'customSearch' ? 'primary' : undefined" @click="changeComponent('customSearch')">高级检索</el-link>
                   <el-link :type="isComponent === 'AdvancedSearch' ? 'primary' : undefined" @click="changeComponent('AdvancedSearch')">专家检索</el-link>  
                 </div>
-                <span class="icon">
-                    <i class="iconfont icon-shouye" @click="openHistory"></i>
-                </span>
+                <div>
+                    <span class="icon">
+                        <el-tooltip class="item" effect="dark" content="检索历史" placement="top">
+                            <i class="iconfont icon-shouye" @click="openHistory"></i>
+                        </el-tooltip>
+                    </span>
+                    <span class="icon margin-left_10">
+                        <el-tooltip class="item" effect="dark" content="检索帮助" placement="top">
+                            <i class="el-icon-question" @click="searchHelp"></i>
+                        </el-tooltip>
+                    </span>
+                </div>
+                
             </div> 
         </div>
         <div style="display:flex;align-items:start;height:calc(100% - 60px);overflow-y:auto">
@@ -285,18 +300,32 @@ export default {
             }
             if(this.DBType == 'inner_CN'){
                 if(val){
-                    val = val + ' AND CO=CN'
+                    var obj = this.$commonJS.extractFieldsAndValues(val)
+                    if(obj && obj.CO){
+                        var index = obj.CO.indexOf('CN')
+                        if(index == -1){
+                            val = val + ' AND CO=CN'
+                        }
+                    }else{
+                        val = val + ' AND CO=CN'
+                    }
                 }else{
                     val = 'CO=CN'
                 }
             }
+            
             var a = {
                 ...this.importData,
                 searchCondition:val || "",
+                showCondition:val || "",
                 DBType:this.DBType,
                 retrieveRecordId:null,
                 type:4,
             }
+            if(data.otherCondition){
+                a.searchCondition = data.otherCondition.search + (val?` AND ${val}`:'')
+                a.showCondition = data.otherCondition.show + (val?` AND ${val}`:'')
+            }
             if(data.component == 'patentNoSearch'){
                 a.NO = data.data
                 a.component = 'patentNoSearch'
@@ -313,6 +342,7 @@ export default {
                 }
             })
             data.innerProjectId = this.innerProjectId
+            data.defaultSearchDB=this.defaultSearchDB
             this.$s.setSession('conditionImport',{
                 data:data,
             })
@@ -364,6 +394,15 @@ export default {
                 }
             )
         },
+        //检索帮助
+        searchHelp(){
+            const router = this.$router.resolve(
+                {
+                    path:'/searchHelp'
+                }
+            )
+            window.open(router.href,'_blank')
+        },
     },
 }
 </script>
@@ -385,7 +424,6 @@ export default {
     .type{
     }
     .icon{
-        
         i{
             font-size:24px;
         }

+ 8 - 6
src/views/components/import/conditionImport/searchResultIndex.vue

@@ -1,15 +1,17 @@
 <template>
-  <div>
-    <search-Result :searchData="searchData" :semanteme="semanteme" :noveltySearch="noveltySearch" :projectId="projectId" :retrieveRecordId="retrieveRecordId" :outside="outside" :innerProjectId="innerProjectId"></search-Result> 
+  <div class="height_100">
+    <search-Result v-if="outside" :searchData="searchData" :semanteme="semanteme" :noveltySearch="noveltySearch" :projectId="projectId" :retrieveRecordId="retrieveRecordId" :outside="outside" :innerProjectId="innerProjectId"></search-Result> 
+    <search-Result1 v-else :searchData="searchData" :semanteme="semanteme" :noveltySearch="noveltySearch" :projectId="projectId" :retrieveRecordId="retrieveRecordId" :outside="outside" :innerProjectId="innerProjectId"></search-Result1> 
   </div>
 </template>
 
 <script>
-// import searchResult from './searchResult.vue';
-import searchResult from './internal_search/searchResult_internal.vue';
+import searchResult from './searchResult.vue';
+import searchResult1 from './internal_search/searchResult_internal.vue';
 export default {
   components: {
-    searchResult
+    searchResult,
+    searchResult1
   },
   props: {},
   data() {
@@ -24,7 +26,7 @@ export default {
         return JSON.parse(this.$route.query.data)
     },
     noveltySearch(){
-      return this.$route.query.noveltySearch=='false'?false:true
+      return this.$route.query.noveltySearch=='true'?true:false
     },
     projectId(){
       return this.$route.query.projectId

+ 1 - 1
src/views/event/components/index.vue

@@ -103,7 +103,7 @@ export default {
       //检索条件
       searchOption: {
         scenarioNames:this.scenarioId || (localStorage.scenarioName?[Number(localStorage.scenarioName)]:''),
-        name:this.eventName || localStorage.searchContent
+        name:this.eventName || this.$route.params.searchContent
       },
       //分组的值
       groupingValue: '',

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

@@ -89,6 +89,16 @@ export default {
       
       options: [
         {
+          label: '中国专利检索(内)',
+          value: 'inner_CN',
+          placeholder: '请输入关键词检索(申请号、公开号、公告号、发明人、申请人、权利人、标题、权利要求、说明书)'
+        },
+        {
+          label: '全球专利检索(内)',
+          value: 'inner_WD',
+          placeholder: '请输入关键词检索(申请号、公开号、公告号、发明人、申请人、权利人、标题、权利要求、说明书)'
+        },
+        {
           label: '专利数据库',
           value: 'Project',
           placeholder: '请输入专利数据库名称'
@@ -116,7 +126,7 @@ export default {
       ],
       queryParams: {
         content: '',
-        select: 'Project'
+        select: 'inner_CN'
       },
     }
   },
@@ -130,13 +140,46 @@ export default {
         this.$message.error('请选择需要检索的信息')
         return false
       }
-      localStorage.searchContent = this.queryParams.content
+      if(this.queryParams.select == 'inner_CN' || this.queryParams.select == 'inner_WD'){
+        var val = 'TX=' + this.queryParams.content.trim()
+        if(this.queryParams.select == 'inner_CN'){
+          val = val + ' AND CO=CN'
+        }
+        var a = {
+          searchCondition:val,
+          DBType:this.queryParams.select,
+          retrieveRecordId:null,
+          type:4,
+        }
+        var data = {
+          DBType:this.queryParams.select,
+          component:'AdvancedSearch',
+          data:val.trim(),
+          defaultSearchDB:['inner_CN','inner_WD']
+        }
+        this.$router.push({
+            path: '/searchResult',
+            query: {
+                data:JSON.stringify(a),
+                noveltySearch:false,
+                outside:false,
+            }
+        })
+        this.$s.setSession('conditionImport',{
+          data:data,
+        })
+        return
+      }
+      // localStorage.searchContent = this.queryParams.content
       this.$router.push({
         name:this.queryParams.select,
+        params:{
+          searchContent:this.queryParams.content
+        }
       })
-      setTimeout(function () {
-        localStorage.removeItem('searchContent')
-      }, 1000);
+      // setTimeout(function () {
+      //   localStorage.removeItem('searchContent')
+      // }, 1000);
     },
     
     //获取提示信息

+ 1 - 2
src/views/layout/index.vue

@@ -20,7 +20,7 @@
         </div>
       </el-header>
       <el-main class="main">
-        <section class="wrapper" >
+        <section class="wrapper">
           <keep-alive>
             <router-view id="view" v-if="$route.meta.keepAlive"></router-view>
           </keep-alive>
@@ -87,7 +87,6 @@ export default {
       await this.$store.dispatch('getSystemField', this.projectId)
     }
     this.guide()
-    
   },
   methods: {
     getProjectName(){

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

@@ -44,10 +44,14 @@
           </div>
         </div>
       </el-header>
-      <el-main v-loading="loading">
-        <component :is="viewSelected" :tableData="tableData" :queryParams="queryParams" :patentNoList.sync="patentNoList"
-          :column="customList" @on-sort="handleSort" @addSelect="getChoosePatentNo" :refresh='refresh' @clickPatentNo="handleClick">
-        </component>
+      <el-main v-loading="loading" style="padding: 0 !important;">
+        <div class="patent-list-container">
+          <div class="height_100"> 
+            <component :is="viewSelected" :tableData="tableData" :queryParams="queryParams" :patentNoList.sync="patentNoList"
+              :column="customList" @on-sort="handleSort" @addSelect="getChoosePatentNo" :refresh='refresh' @clickPatentNo="handleClick">
+            </component>
+          </div>
+        </div>
       </el-main>
       <el-footer style="display: flex;justify-content: space-between;align-items: center;">
         <div>

+ 1 - 1
src/views/product/components/index.vue

@@ -101,7 +101,7 @@ export default {
       //检索条件
       searchOption: {
         questionName: this.eventName,
-        product_name:localStorage.searchContent
+        product_name:this.$route.params.searchContent
       },
       //分组的值
       groupingValue: 'noGrouping',

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

@@ -105,7 +105,7 @@ export default {
       searchOption: {
         scenarioNames:this.scenarioId,
         matterNames:this.matterId,
-        name:localStorage.searchContent,
+        name:this.$route.params.searchContent,
         eventNames:this.eventName
       },
       //专利数据库数据总数

+ 8 - 6
src/views/project/patentCollection/index.vue

@@ -143,12 +143,14 @@
           </div>
 
         </el-header>
-        <el-main v-loading="loading">
-          <div class="height_100">
-            <component ref="patentViewList" :is="viewSelected" :semanteme="semanteme" @download="handleDownload" @change-read="handleChangeRead"
-              :projectId="projectId" :patentNoList.sync="patentNoList" @addSelect="getChoosePatentNo"
-              @clickPatentNo="handleClick" :column="customList" @index-setting="handleIndexSetting" @on-sort="handleSort"
-              :queryParams="queryParams" :tableData="tableData" :refresh='refresh'></component>
+        <el-main v-loading="loading" style="padding: 0 !important;">
+          <div class="patent-list-container">
+            <div class="height_100">
+              <component ref="patentViewList" :is="viewSelected" :semanteme="semanteme" @download="handleDownload" @change-read="handleChangeRead"
+                :projectId="projectId" :patentNoList.sync="patentNoList" @addSelect="getChoosePatentNo"
+                @clickPatentNo="handleClick" :column="customList" @index-setting="handleIndexSetting" @on-sort="handleSort"
+                :queryParams="queryParams" :tableData="tableData" :refresh='refresh'></component>
+            </div>
           </div>
         </el-main>
         <el-footer class="pagination" style="display:flex;justify-content:space-between;align-items:center">

+ 8 - 8
src/views/project/patentDetails/components/menu.vue

@@ -379,15 +379,15 @@ export default {
 
         return false
       }
-      var api = ''
-      if(this.isContract){
-        // this.queryParams.current = ((this.currentLocation-1) < current)? 0 : ((this.currentLocation-1) - current)
+      var api = 'QueryPatent'
+      // if(this.isContract){
+      //   // this.queryParams.current = ((this.currentLocation-1) < current)? 0 : ((this.currentLocation-1) - current)
         
-        api = 'getPatentPageMessage'
-      }else{
-        // this.queryParams.current = parseInt((this.currentLocation-1) / this.queryParams.size) + 1
-        api = 'QueryPatent'
-      }
+      //   api = 'getPatentPageMessage'
+      // }else{
+      //   // this.queryParams.current = parseInt((this.currentLocation-1) / this.queryParams.size) + 1
+      //   api = 'QueryPatent'
+      // }
       var params = {}
       var params1 = {
         ...this.queryParams,//分页信息

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

@@ -100,7 +100,7 @@ export default {
       return this.$route.query.productId
     },
     noveltySearch(){
-      return this.$route.query.noveltySearch
+      return this.$route.query.noveltySearch=='true'?true:false
     },
     retrieveRecordId(){
       return this.$route.query.retrieveRecordId

+ 7 - 3
src/views/report/components/checkPatent/checkPatent.vue

@@ -14,9 +14,13 @@
           </slot>
           
         </el-header>
-        <el-main style="height:calc(100vh - 350px)">
-          <Table :column="column" :tableData="tableData" :queryParams="queryParams" :refresh="refresh" v-loading="loading"
-            :patentNoList.sync="patentNoList" :projectId="projectId" @on-sort="handleSort"></Table>
+        <el-main style="height:calc(100vh - 350px); padding: 0 !important;">
+          <div class="patent-list-container">
+            <div class="height_100"> 
+              <Table :column="column" :tableData="tableData" :queryParams="queryParams" :refresh="refresh" v-loading="loading"
+              :patentNoList.sync="patentNoList" :projectId="projectId" @on-sort="handleSort"></Table>
+            </div>
+          </div>
         </el-main>
         <el-footer>
           <div style="display: flex;justify-content: space-between;margin-bottom: 10px;">

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

@@ -128,7 +128,7 @@ export default {
 
       //检索条件
       searchOption: {
-        name: localStorage.searchContent,
+        name: this.$route.params.searchContent,
         reportType: localStorage.reportType ? [localStorage.reportType] : '',
         scenarioNames: this.scenarioId,
         matterNames: this.matterId,

+ 8 - 4
src/views/report/components/patentList/components/index.vue

@@ -47,10 +47,14 @@
               </div>
             </div>
           </el-header>
-          <el-main class="height_100" v-loading="loading">
-            <component :is='components' :tableData="tableData" :column="fieldList" :projectId="projectId"
-              @on-sort="handleSort" :queryParams="queryParams" @clickPatentNo="handleClick"
-              @ifHaveChild="handleIfHaveChild" :refresh='refresh' @index-setting="handleIndexSetting" :patentNoList.sync="patentNoList" @addSelect="getChoosePatentNo"></component>
+          <el-main class="height_100" v-loading="loading" style="padding: 0 !important;">
+            <div class="patent-list-container">
+              <div class="height_100"> 
+                <component :is='components' :tableData="tableData" :column="fieldList" :projectId="projectId"
+                  @on-sort="handleSort" :queryParams="queryParams" @clickPatentNo="handleClick"
+                  @ifHaveChild="handleIfHaveChild" :refresh='refresh' @index-setting="handleIndexSetting" :patentNoList.sync="patentNoList" @addSelect="getChoosePatentNo"></component>
+              </div>
+            </div>
           </el-main>
           <!-- <el-footer class="pagination">
             <el-pagination background layout="total, sizes, prev, pager, next, jumper"