Explorar el Código

引入导入方式以及事件详情

zhuliu hace 1 año
padre
commit
6989def239
Se han modificado 44 ficheros con 4686 adiciones y 151 borrados
  1. 1 1
      src/main.js
  2. 28 33
      src/router/index.js
  3. 1 1
      src/utils/model/index.js
  4. 310 0
      src/views/components/import/PatentNoImport/download.vue
  5. 43 0
      src/views/components/import/PatentNoImport/index.vue
  6. 96 0
      src/views/components/import/conditionImport/AdvancedSearch.vue
  7. 271 0
      src/views/components/import/conditionImport/FormSearch.vue
  8. 517 0
      src/views/components/import/conditionImport/components/projectListDialog.vue
  9. 271 0
      src/views/components/import/conditionImport/components/search_history.vue
  10. 136 0
      src/views/components/import/conditionImport/customSearch.vue
  11. 37 0
      src/views/components/import/conditionImport/index.vue
  12. 197 0
      src/views/components/import/conditionImport/patentDetails/PatentList.vue
  13. 279 0
      src/views/components/import/conditionImport/patentDetails/patentDetail.vue
  14. 141 0
      src/views/components/import/conditionImport/patentDetails/patentIndex.vue
  15. 147 0
      src/views/components/import/conditionImport/search.vue
  16. 507 0
      src/views/components/import/conditionImport/searchResult.vue
  17. 44 0
      src/views/components/import/conditionImport/searchResultIndex.vue
  18. 373 0
      src/views/components/import/conditionImport/view/Abstract.vue
  19. 89 0
      src/views/components/import/conditionImport/view/Picture.vue
  20. 302 0
      src/views/components/import/conditionImport/view/Table.vue
  21. 117 0
      src/views/components/import/conditionImport/view/TableSort.vue
  22. 181 0
      src/views/components/import/excelImport/importPatent.vue
  23. 41 0
      src/views/components/import/excelImport/index.vue
  24. 344 0
      src/views/components/import/index.vue
  25. 55 0
      src/views/event/components/details/drawer/index.vue
  26. 0 0
      src/views/event/components/details/mixins.js
  27. 0 0
      src/views/event/components/details/showDialog.js
  28. 0 0
      src/views/event/components/details/visual.vue
  29. 1 1
      src/views/home/components/visualDialog.vue
  30. 127 0
      src/views/event/components/details/visualRouter.vue
  31. 1 0
      src/views/event/components/index.vue
  32. 1 1
      src/views/event/components/mixins/index.js
  33. 0 103
      src/views/home/components/visualRouter.vue
  34. 1 1
      src/views/patentMining/components/mixins/index.js
  35. 1 1
      src/views/patentMining/components/view/commonTable.vue
  36. 1 0
      src/views/patentMining/components/viewIndex.vue
  37. 1 1
      src/views/project/components/view/table.vue
  38. 1 0
      src/views/project/index.vue
  39. 1 1
      src/views/project/patentCollection/index.vue
  40. 1 0
      src/views/report/components/index.vue
  41. 1 1
      src/views/report/components/mixins/index.js
  42. 1 1
      src/views/report/components/view/table.vue
  43. 9 2
      src/views/visual/components/drawer/eventDrawer.vue
  44. 10 3
      src/views/visual/components/drawer/titleDrawer.vue

+ 1 - 1
src/main.js

@@ -29,7 +29,7 @@ Vue.prototype.$r = permission.hasRole
 Vue.prototype.$permission = permission.hasPermission
 Vue.prototype.$permission = permission.hasPermission
 Vue.prototype.$reportPermission = permission.reportPermission
 Vue.prototype.$reportPermission = permission.reportPermission
 
 
-import eventVisual from "@/views/home/components/showDialog";
+import eventVisual from "@/views/event/components/details/showDialog";
 Vue.prototype.$eventVisual = eventVisual;
 Vue.prototype.$eventVisual = eventVisual;
 import showTiShi from "./utils/model/tishi/index";
 import showTiShi from "./utils/model/tishi/index";
 Vue.prototype.$showTiShi = showTiShi;
 Vue.prototype.$showTiShi = showTiShi;

+ 28 - 33
src/router/index.js

@@ -230,7 +230,7 @@ const routes = [
               sign:'eventVisual',
               sign:'eventVisual',
               belong:'Event'
               belong:'Event'
             },
             },
-            component: () => import('@/views/home/components/visualRouter'),
+            component: () => import('@/views/event/components/details/visualRouter.vue'),
           },
           },
         ],
         ],
       },
       },
@@ -481,45 +481,40 @@ const routes = [
         name:'/checkFile',
         name:'/checkFile',
         meta:{
         meta:{
           aside:true,
           aside:true,
-          // hiddenHeader: true,
           sign:'checkFile',
           sign:'checkFile',
         },
         },
         component:() => import('@/views/components/view/checkFile.vue'),
         component:() => import('@/views/components/view/checkFile.vue'),
       },
       },
       //excel导入
       //excel导入
-      // {
-      //   path: '/import',
-      //   name:"import",
-      //   meta:{
-      //     aside: true,
-      //     showHeader:true,
-      //   },
-      //   // component:() => import('@/views/components/import'),
-      //   component:() => import('@/views/components/import/excelImport'),
-      // },
+      {
+        path: '/import',
+        name:"import",
+        meta:{
+          title: 'excel导入',
+          sign:'import'
+        },
+        component:() => import('@/views/components/import/excelImport'),
+      },
       //专利号导入
       //专利号导入
-      // {
-      //   path: '/PatentNoImport',
-      //   name:"PatentNoImport",
-      //   meta:{
-      //     aside: true,
-      //     showHeader:true,
-      //   },
-      //   // component:() => import('@/views/components/import'),
-      //   component:() => import('@/views/components/import/PatentNoImport'),
-      // },
+      {
+        path: '/PatentNoImport',
+        name:"PatentNoImport",
+        meta:{
+          title: '专利号导入',
+          sign:'PatentNoImport'
+        },
+        component:() => import('@/views/components/import/PatentNoImport'),
+      },
       //检索导入
       //检索导入
-      // {
-      //   path: '/conditionImport',
-      //   name:"conditionImport",
-      //   meta:{
-      //     title: '专利检索',
-      //     aside: true,
-      //     showHeader:true,
-      //   },
-      //   // component:() => import('@/views/components/import'),
-      //   component:() => import('@/views/components/import/conditionImport'),
-      // },
+      {
+        path: '/conditionImport',
+        name:"conditionImport",
+        meta:{
+          title: '专利检索',
+          sign:'conditionImport'
+        },
+        component:() => import('@/views/components/import/conditionImport'),
+      },
       // //检索结果
       // //检索结果
       // {
       // {
       //   path: "/searchResult",
       //   path: "/searchResult",

+ 1 - 1
src/utils/model/index.js

@@ -7,7 +7,7 @@ import mySearch from './retrieval/search.vue';
 import myMenu from './menu/index.vue';
 import myMenu from './menu/index.vue';
 import myView from './myView/index.vue';
 import myView from './myView/index.vue';
 import mySelectButton from './selectButton/index.vue';
 import mySelectButton from './selectButton/index.vue';
-import myFormSearch from './search/searchIndex.vue';
+import myFormSearch from './search/search.vue';
 import myTimeChoose from './time/timeChoose.vue';
 import myTimeChoose from './time/timeChoose.vue';
 
 
 import myContextMenu from './contextMenu/index.vue';
 import myContextMenu from './contextMenu/index.vue';

+ 310 - 0
src/views/components/import/PatentNoImport/download.vue

@@ -0,0 +1,310 @@
+<template>
+    <div style="background: white;padding: 20px;height: 100%;">
+      <div style="float:right" v-if="downloadId==9">
+        <el-button type="primary" @click="settingUser">账号配置</el-button>
+      </div>
+      <div style="width: 800px;margin: 0 auto;">
+        <div v-if="downloadId==9" >
+          <el-form :inline="true" :model="queryParams" :rules="rules" ref="from" class="demo-form-inline" style="display: flex;justify-content: space-between;">
+            <el-form-item label="来源网站" prop="configId">
+              <el-select v-model="queryParams.configId" placeholder="请选择网站" >
+                  <el-option v-for="item in website"
+                    :key="item.id"
+                    :label="item.webName"
+                    :value="item.id">
+                  </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="下载内容" prop="configCells">
+              <el-select v-model="queryParams.configCells"  multiple collapse-tags placeholder="请选择下载内容" style="width: 100%;">
+                  <el-option v-for="item in download"
+                    :key="Number(item.cellValue)"
+                    :label="item.cellName"
+                    :value="Number(item.cellValue)">
+                  </el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="是否更新" prop="taskType">
+              <el-switch v-model="queryParams.taskType" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949" @change="change3">  </el-switch>
+            </el-form-item>
+          </el-form>
+          <div v-show="queryParams.taskType"  >
+            <el-form :inline="true" ref="from" :model="queryParams" :rules="rules" class="demo-form-inline" style="display: flex;justify-content: space-between;">
+              <el-form-item label="更新间隔" prop="dateType">
+                <el-select v-model="queryParams.dateType" @change="getDateType" clearable placeholder="请选择更新时间间隔" style="margin-right: 20px;">
+                  <el-option v-for="item in options"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="选择更新具体时间" v-if="queryParams.dateType" >
+                <myTimeChoose :type="queryParams.dateType" @value="handleData" :cron="queryParams.crons" style="width:300px"></myTimeChoose>
+              </el-form-item>
+            </el-form>
+          </div>
+          </div>
+          <!-- <div style="display: flex;margin-bottom: 10px;" v-if="queryParams.configType==2">
+            <p style="width:150px;margin-right:10px;margin-bottom: 10px;">数据库:</p>
+            <div>
+              <el-checkbox-group v-model="queryParams.database">
+                <el-checkbox v-for="item in database" :key="item.value" :label="item.value" style="margin:5px">{{ item.label }}</el-checkbox>
+              </el-checkbox-group>
+            </div>
+          </div> -->
+          <!-- 搜索 -->
+          <div style="display: flex;justify-content: center;width: 100%;align-items:center">
+            <span style="width: 100%;">
+               <el-input v-model="queryParams.conditions" :placeholder="downloadId==9?'请输入检索信息':'请输入专利号(多个专利号同时添加中间请用符号“|”隔开)'" ></el-input>
+            </span>
+            <span style="margin-left:8px" v-if="queryParams.configType==2">
+              <el-tooltip class="item" effect="dark" content="检索说明" placement="top">
+                <i class="el-icon-question" style="font-size:28px" @click="checkConceal(3)" ></i>
+              </el-tooltip>
+            </span>
+              <el-button @click="imports" type="primary" icon="el-icon-upload el-icon--right" style="margin-left:20px"> 导入 </el-button>
+          </div>  
+      </div>
+      
+      <div>
+         <SystemTask :form="9" :reportId="reportId" :productId="productId" :projectId="projectId"></SystemTask> 
+      </div>
+    </div>
+</template>
+
+<script>
+import SystemTask from "@/views/task/index.vue";
+import { cron } from "@/utils/model/time/mixins";
+
+export default {
+  mixins:[cron],
+  props:['reportId','downloadId','asCompare','productId','projectId'],
+  components: {
+    SystemTask,
+  },
+  data() {
+    const dateTypeRule = (rule, value, callback) => {
+      // console.log(value)
+      if (this.queryParams.taskType == 1) {
+        if (value) {
+          callback()
+        } else {
+          callback(new Error('请选择更新周期'))
+        }
+      } else {
+        callback()
+      }
+    }
+    return {
+      database:[
+        {
+          label:'中国发明专利',
+          value:'FMZL'
+        },
+        {
+          label:'中国发明授权',
+          value:'FMSQ'
+        },
+        {
+          label:'中国实用新型',
+          value:'SYXX'
+        },
+        {
+          label:'中国外观专利',
+          value:'WGZL'
+        },
+        {
+          label:'美国',
+          value:'USPATENT'
+        },
+        {
+          label:'英国',
+          value:'GBPATENT'
+        },
+        {
+          label:'法国',
+          value:'FRPATENT'
+        },
+        {
+          label:'德国',
+          value:'DEPATENT'
+        },
+        {
+          label:'瑞士',
+          value:'CHPATENT'
+        },
+        {
+          label:'日本',
+          value:'JPPATENT'
+        },
+        {
+          label:'俄罗斯',
+          value:'RUPATENT'
+        },
+        {
+          label:'韩国',
+          value:'KRPATENT'
+        },
+        {
+          label:'欧洲专利局',
+          value:'EPPATENT'
+        },
+        {
+          label:'世界知识产权组织',
+          value:'WOPATENT'
+        },
+
+      ],
+      website:[],//选择网站
+      download: [],//选择下载内容
+      options: [
+        {label:'每天',value:'day'},
+        {label:'每周',value:'week'},
+        {label:'每月',value:'month'},
+        {label:'每年',value:'year'},
+      ],
+      queryParams: {
+        database:[],
+        reportId: this.reportId,
+        productId: this.productId,
+        projectId: this.projectId,
+        crons:'',
+        conditions:'',//搜索条件
+        configId: '',//网站
+        configType:'',
+        configCells: [],//下载内容
+        dateType:'',
+        dates: '',
+        taskType:0,//0普通任务1定时任务
+        taskState:0,//任务状态 0等待1进行2成功3失败
+      },
+      isGetList:false,
+      rules: {
+        configId: [{ required: true, message: '请选择来源网站', trigger: 'change' },],
+        configCells: [{ required: true, message: '请选择下载内容', trigger: 'change' },],
+        taskType: [{ required: true, message: '请选择', trigger: 'change' },],
+        dateType: [{ required: true,  validator:dateTypeRule, trigger: 'change' },],
+      },
+    }
+  },
+  created() {
+
+  },
+  watch: {
+    'queryParams.configId'(val) {//更换网站
+      let a= this.website.filter(item => {
+        return item.id==val
+      })
+      this.queryParams.configType = a[0].webType
+      this.downloads()
+    },
+
+  },
+  mounted() {
+    // this.getList()
+  },
+  methods: {
+    checkConceal(id) {
+      const router = this.$router.resolve({
+        path: '/agreeConceal',
+        query: {
+          id:id
+        }
+      })
+      window.open(router.href, '_blank')
+      // const router1 = this.$router.resolve({
+      //   path: '/downPatentList',
+        
+      // })
+      // window.open(router1.href, '_blank')
+    },
+    //打开账号配置
+    settingUser(){
+      this.$refs.settingUser.open(this.website)
+    },
+    change3(val) {
+      // console.log(val);
+    },
+    getDateType(val) {
+      // console.log(val)
+      this.queryParams.crons = ''
+    },
+    // 获取时间
+    handleData(val) {
+      if (this.queryParams.dateType=='') {
+        this.$message.error('请先选择更新周期')
+        return false
+      }
+      this.queryParams.crons=val
+    },
+    // 请求全部网站
+    getList() {
+      this.$api.getAllConfig({}).then(res => {
+        if (res.code==200) {
+          this.website = res.data
+        }
+      })
+    },
+    // 请求当前网站可下载项
+    async downloads() {
+      await this.$api.getConfigCell({type:this.queryParams.configType}).then(res => {
+        if (res.code==200) {
+          this.download = res.data
+          this.queryParams.configCells=this.download.map(item=>{ return Number(item.cellValue) })
+        }
+      })
+    },
+    // 导入
+    imports() {
+      if (this.queryParams.conditions == '') {
+        if (this.downloadId == 9) {
+          this.$message.error('请输入检索信息')
+        } else {
+          this.$message.error('请输入专利号')
+        }
+        return false
+      }
+      if (this.downloadId == 8) {
+        this.queryParams.patentNo = this.queryParams.conditions
+        this.queryParams.conditions = ''
+        this.queryParams.asCompare=this.asCompare
+        this.$api.importByNos(this.queryParams).then(res => {
+          // console.log(res.code);
+          if (res.code == 200) {
+            if (res.data && res.data.length > 0) {
+              // if (!res.data.includes('')) {
+              // this.alterMessage(res.data)
+              // }
+            } else {
+              this.$message.success('创建任务完成,正在导入!')
+            }
+           
+            this.queryParams.patentNo = ''
+            // this.getList()
+          }
+        }).catch(error => {
+        })
+        return false
+      }
+      this.$refs.from.validate((valid) => {
+        if (valid) {
+          this.$api.addTask(this.queryParams).then(res => {
+            if (res.code==200) {
+              this.$message.success('创建任务完成,正在导入!')
+              this.queryParams.conditions = ''
+              this.isGetList=!this.isGetList
+            }
+          })
+        }
+        
+      })
+     
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 43 - 0
src/views/components/import/PatentNoImport/index.vue

@@ -0,0 +1,43 @@
+<template>
+  <div>
+    <download :reportId="reportId" :downloadId="option" :asCompare="asCompare" :productId="productId" :projectId="projectId"></download>
+  </div>
+</template>
+
+<script>
+import download from "./download.vue";
+export default {
+  components: {
+    download
+  },
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    reportId() {
+      return this.$route.query.reportId
+    },
+    projectId() {
+      return this.$route.query.projectId
+    },
+    productId() {
+      return this.$route.query.productId
+    },
+    option() {
+      return this.$route.query.option
+    },
+    asCompare() {
+      return this.$route.query.asCompare
+    }
+  },
+  methods: {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 96 - 0
src/views/components/import/conditionImport/AdvancedSearch.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="advancedSearch">
+    <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">
+            <el-button type="danger" plain size="small" style="width:100px" @click="cancel">清空</el-button>
+            <el-button type="primary" size="small" style="width:100px" @click="search">检索</el-button>
+        </div>
+    </div>
+    <div>
+        <div>
+            <div><b>表达式与语法:</b></div>
+            检索条件表达式,可支持AND、OR、NOT等逻辑运算符号(不区分大小写)和等于(=)比较符号,其中:<br>
+            1、日期栏位的值支持yyyy. yyyyMM、 yyyyMMdd等格式;已知时间的连续范围为“2006-02-02”到“2009-01-01”,应输入:<span class="red">AD=20060202~20090101</span>;注意:日期的范围检索必须精确到日。<br>
+            2、专利类型(PT)栏位的值包括:1、8 为发明 检索发明,2、9 为新型,3 为外观(注意:仅中国专利);例:<span class="red">PT=1</span><br>
+            3、法律状态(LG)栏位的值包括:1:有效、2:失效、3:审中(注意:仅中国专利);例:<span class="red">LG=1</span><br>
+            4、国家〔地区)相关栏位的值为国家地区代码,需要大写,例如:CN代表中国、US代表美国、JP代表日本等;<br>
+            5、搜索条件中有空格把整个搜索条件前后加上英文双引号,例如:<span class="red">TI=(石墨烯 NOT 石墨烯薄膜 OR "graphene film") AND AD=2018 AND GD=20180205~20190101</span>;<br>
+        </div>
+        <div>
+            <div><b>检索栏位包括:</b></div>
+            <div class="field">
+                <p v-for="item in field.filter(item=>{return item.type != (this.DBType=='WD'?1:2)})" :key="item.label"><span style="color:red">{{ item.value }}</span>:{{ item.label }}</p>
+            </div>
+            <div><b>省市代码(仅中国专利):</b></div>
+            <div v-html="changeRed('province')">
+               
+            </div>
+            <div><b>国别代码:</b></div>
+            <div>
+                <span v-for="(item) in countryList" :key="item.value"><span class="red">{{ item.value }}</span>&nbsp;{{ item.label }}&nbsp;&nbsp;</span>
+            </div>
+        </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props:['countryList','DBType'],
+  data() {
+    return {
+        condition:'',
+        field:this.$constants.searchField,
+    };
+  },
+  watch: {
+  },
+  computed: {},
+  
+  created() {},
+  mounted() {
+    this.field = [].concat(...this.field.map(item=>{return item.children}))
+  },
+  methods: {
+    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")
+        }
+        return "<span style='color:red'>11 </span>"+str.replace(regx,"<span style='color:red'>&nbsp;&nbsp; $& </span>")
+    },
+    cancel(){
+        this.condition = ''
+    },
+    search(){
+        var a = this.condition
+        // if(a.trim().indexOf('(')!=0){
+        //     a = `${a}`
+        // }
+        this.$emit('search',a.trim())
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.advancedSearch{
+    padding: 10px;
+}
+.field{
+    display: flex;
+    flex-wrap:wrap;
+    p{
+        width:200px;
+        margin:5px;
+    }
+}
+.red{
+    color:red
+}
+</style>

+ 271 - 0
src/views/components/import/conditionImport/FormSearch.vue

@@ -0,0 +1,271 @@
+<template>
+    <div class="formSearch">
+        <el-form :model="form" label-width="120px" size="small" label-position="right">
+            <template  v-for="item in constants.searchField" >
+                <div :key="item.label" v-if="(dbType ==2 && item.value!='typeAndStatus')||dbType !=2 ">
+                    <div>
+                        <span>{{item.label}}</span>
+                        <el-divider></el-divider>
+                    </div>
+                    <div>
+                        <el-row>
+                            <el-col :span="24">
+                                <div v-for="(i,index) in item.children" :key="i.value">
+                                    <div v-if="index%2==0">
+                                        <el-col :span="12" v-if="(item.children[index].type == dbType || item.children[index].type == 3)">
+                                            <el-form-item :label="item.children[index].label+':'">
+                                                <!-- <el-select v-model="form[item.children[index].value]" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
+                                                    <el-option
+                                                    v-for="item in constants[item.children[index].value]"
+                                                    :key="item.value"
+                                                    :label="item.label"
+                                                    :value="item.value">
+                                                    </el-option>
+                                                </el-select> -->
+                                                <div v-if="item.children[index].dataType==2" style="display:flex;width:100%">
+                                                    <el-date-picker
+                                                        v-model="form[item.children[index].value][0]"
+                                                        style="width:50%"
+                                                        type="date"
+                                                        size='small'
+                                                        value-format="yyyyMMdd"
+                                                        placeholder="开始,例:20000101">
+                                                    </el-date-picker>
+                                                    <el-date-picker
+                                                        style="width:50%"
+                                                        v-model="form[item.children[index].value][1]"
+                                                        type="date"
+                                                        size='small'
+                                                        value-format="yyyyMMdd"
+                                                        placeholder="结束,例:20001231">
+                                                    </el-date-picker>
+                                                </div>
+                                                <div v-else-if="item.children[index].dataType==3" style="width:100%">
+                                                    <el-select v-model="form[item.children[index].value]" size="small" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
+                                                        <el-option
+                                                            v-for="item in item.children[index].value=='GJ'?countryList:constants[item.children[index].value]"
+                                                            :key="item.value"
+                                                            :label="item.label"
+                                                            :value="item.value">
+                                                        </el-option>
+                                                    </el-select>
+                                                </div>
+                                                <div v-else style="width:100%"><el-input size='small' style="width:100%" v-model="form[item.children[index].value]" :placeholder="item.children[index].placeholder"></el-input> </div>
+                                            </el-form-item>
+                                        </el-col>
+                                        <el-col :span="12" v-if="(item.children[index+1]) && (item.children[index+1].type == dbType || item.children[index+1].type == 3)" >
+                                            <el-form-item :label="item.children[index+1].label+':'">
+                                                <!-- <el-select v-model="form[item.children[index+1]?.value]" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
+                                                    <el-option
+                                                    v-for="item in constants[item.children[index+1]?.value]"
+                                                    :key="item.value"
+                                                    :label="item.label"
+                                                    :value="item.value">
+                                                    </el-option>
+                                                </el-select> -->
+                                                <div v-if="item.children[index+1].dataType==2" style="display:flex;width:100%">
+                                                    <el-date-picker
+                                                        v-model="form[item.children[index+1].value][0]"
+                                                        style="width:50%"
+                                                        type="date"
+                                                        size='small'
+                                                        value-format="yyyyMMdd"
+                                                        placeholder="开始,例:20000101">
+                                                    </el-date-picker>
+                                                    <el-date-picker
+                                                        style="width:50%"
+                                                        v-model="form[item.children[index+1].value][1]"
+                                                        type="date"
+                                                        size='small'
+                                                        value-format="yyyyMMdd"
+                                                        placeholder="结束,例:20001231">
+                                                    </el-date-picker>
+                                                </div>
+                                                <div v-else-if="item.children[index+1].dataType==3" style="width:100%">
+                                                    <el-select v-model="form[item.children[index+1].value]" size="small" multiple filterable collapse-tags placeholder="请选择,可多选" style="width:100%">
+                                                        <el-option
+                                                            v-for="item in item.children[index+1].value=='GJ'?countryList:constants[item.children[index+1].value]"
+                                                            :key="item.value"
+                                                            :label="item.label"
+                                                            :value="item.value">
+                                                        </el-option>
+                                                    </el-select>
+                                                </div>
+                                                <div v-else style="width:100%"><el-input size='small' style="width:100%" v-model="form[item.children[index+1].value]" :placeholder="item.children[index+1].placeholder"></el-input> </div>
+
+                                            </el-form-item>
+                                        </el-col>
+                                    </div>
+                                    
+                                </div>
+                                
+                            </el-col>
+                        </el-row>
+                    </div>
+                </div>
+            </template>
+        </el-form>
+        <div style="display:flex;justify-content: center;">
+            <el-button type="danger" plain size="small" style="width:100px" @click="cancel">清空</el-button>
+            <el-button type="primary" size="small" style="width:100px" @click="search">检索</el-button>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    props:['countryList','DBType'],
+    data() {
+        return {
+            form:{
+                // AD:[],
+                // PD:[],
+                // GD:[]
+            },
+            dbType:this.DBType=='WD'?'2':'1',
+            constants:this.$constants,
+            option1:[//法律状态
+                {
+                    label:'有效',
+                    value:1
+                },
+                {
+                    label:'无效',
+                    value:2
+                },
+                {
+                    label:'审中',
+                    value:3
+                },
+            ],
+            option2:[//专利类型
+                {
+                    label:'发明',
+                    value:1
+                },
+                {
+                    label:'新型',
+                    value:2
+                },
+                {
+                    label:'外观',
+                    value:3
+                },
+            ],
+        }
+    },
+    watch:{
+        DBType(val){
+            this.dbType = val == 'WD'?'2':'1'
+        }
+    },
+    mounted() {
+        
+    },
+    methods: {
+        selectAll () {
+            if (this.form.GJ.length < this.countryList.length) { // 非全选时,点击选择全部
+                this.form.GJ = this.countryList.map((item) => {
+                    return item.value
+                })
+                // this.form.GJ.unshift('-1')
+            } else { // 全选时,点击置空
+                this.form.GJ = []
+            }
+        },
+        cancel(){
+            this.form = {
+                AD:[],
+                PD:[],
+                GD:[]
+            }
+        },
+        search(){
+            var str = ''
+            var keys = Object.keys(this.form)
+            for(let i = 0;i<keys.length;i++){
+                var str1 = ''
+                if(typeof this.form[keys[i]] == 'object'){
+                    if(this.form[keys[i]].length>0){
+                        if(keys[i]=='PD' || keys[i]=='GD' || keys[i]=='AD'){
+                            if(this.form[keys[i]].length>0){
+                                // if(this.form[keys[i]][0]){
+                                //     str1 = str1 + keys[i] + '>=' + this.form[keys[i]][0]  
+                                // }
+                                // console.log(this.form[keys[i]])
+                                if(!this.form[keys[i]][0] && !this.form[keys[i]][1]){
+
+                                }else{
+                                    if( this.form[keys[i]][0] && this.form[keys[i]][1] ){
+                                        // str1 = str1 + ' AND ' + keys[i] + '<=' + this.form[keys[i]][1] 
+                                        str1 = str1 + keys[i] + '=' + this.form[keys[i]][0] +'~'+this.form[keys[i]][1]
+                                    }else if(!this.form[keys[i]][0] || !this.form[keys[i]][1]){
+                                        // str1 = str1 + keys[i] + '<=' + this.form[keys[i]][1] 
+                                        str1 = str1 + keys[i] + '=' + (this.form[keys[i]][0] || this.form[keys[i]][1])
+                                    }
+                                }
+                                
+                            }
+                        }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{
+                                str1 = str1 + keys[i] + '=' + this.form[keys[i]][0]
+                            }
+                            
+                        }
+                    }
+                }else{
+                    if(this.form[keys[i]]){
+                        var a = this.form[keys[i]].replace(/("[^"]*"|'[^']*')/g,'')
+                        var arr = a.match(/\s{1}and|AND|OR|or|NOT|not\s{1}/g)
+                        if(arr&&arr.length>0){
+                            str1 = str1 + keys[i] + '=(' + this.form[keys[i]]+')'  
+                        }else{
+                            str1 = str1 + keys[i] + '=' + this.form[keys[i]] 
+                        }
+                        
+                    }
+                    
+                }
+                if(str1!=''){
+                    if(i<keys.length-1){
+                        str = str + str1 + ' AND ' 
+                    }else{
+                        str = str +  str1 
+                    }
+                }
+                
+            }
+            if(str.charAt(str.length-1)==' '){
+                str=str.slice(0,str.length-5);
+            }
+            this.$emit('search',str)
+        },
+    },
+}
+</script>
+<style lang="scss">
+.formSearch .el-divider{
+    margin-top:5px;
+    margin-bottom:24px;
+}
+
+</style>
+<style lang="scss" scoped>
+    .formSearch{
+        padding:10px;
+    }
+</style>

+ 517 - 0
src/views/components/import/conditionImport/components/projectListDialog.vue

@@ -0,0 +1,517 @@
+<template>
+  <div>
+    <el-dialog title="导入到报告" :visible.sync="dialogVisible" width="500px" :before-close="handleClose">
+        <div>
+            <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+              <!-- <el-form-item label="任务名称">
+                <div>
+                  <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
+                </div>
+              </el-form-item> -->
+                <el-form-item label="选择报告" prop="reportId">
+                    <div class="selectButton">
+                        <el-select v-model="form.reportId" filterable remote clearable @change="changeProjectId" placeholder="请选择报告" :loading="loading" v-SelectLazyLoading="lazyLoading" :remote-method="remoteMethod">
+                            <el-option
+                            v-for="item in reportList"
+                            :key="item.id"
+                            :label="item.name"
+                            :value="item.id"
+                            >
+                            </el-option>
+                        </el-select>
+                        <!-- <el-button @click="addProject"><i class="el-icon-plus"></i></el-button> -->
+                    </div>
+                </el-form-item>
+                <!-- <template v-if="form.reportId" >
+                    <div style="margin:10px 0;">
+                        <p>选择需要关联的标引与分类</p>
+                            <el-table :data="tableData" :show-header="false">
+                                <el-table-column type="expand">
+                                    <template slot-scope="props">
+                                        <el-form label-position="top" class="custom-field-form">
+                                            <template v-if="props.row.field === 'folder'">
+                                                <el-tree
+                                                    ref="folderTree"
+                                                    :data="customField.folder"
+                                                    check-strictly
+                                                    :default-checked-keys="form.json.field.folder"
+                                                    show-checkbox
+                                                    node-key="id"
+                                                    :props="defaultProps"
+                                                    @check-change="changeFolder"
+                                                ></el-tree>
+                                            </template>
+                                            <template v-else v-for="(item, index) in customField[props.row.field]">
+                                                <el-form-item :label="`${index + 1}. ${item.name}`">
+                                                    <template v-if="item.type === 0 || item.type === 2">
+                                                    <el-input v-model="form.json.field[item.id].value" placeholder="请输入内容" size="small"></el-input>
+                                                    </template>
+                                                    <template v-if="item.type === 1">
+                                                    <el-date-picker v-model="form.json.field[item.id].value" value-format="yyyy-MM-dd" type="date" size="small" placeholder="选择日期" style="width: 100%;"></el-date-picker>
+                                                    </template>
+                                                    <template v-if="item.type === 3">
+                                                    <el-select v-model="form.json.field[item.id].value" size="small" placeholder="请选择" class="width_100">
+                                                        <el-option v-for="option in item.option" :value="option.id" :label="option.name"></el-option>
+                                                    </el-select>
+                                                    </template>
+                                                    <template v-if="item.type === 4">
+                                                    <el-radio-group v-model="form.json.field[item.id].value">
+                                                        <el-radio v-for="option in item.option" :label="option.id">{{ option.name }}</el-radio>
+                                                    </el-radio-group>
+                                                    </template>
+                                                    <template v-if="item.type === 5">
+                                                    <el-checkbox-group v-model="form.json.field[item.id].value">
+                                                        <el-checkbox v-for="option in item.option" :label="option.id">{{ option.name }}</el-checkbox>
+                                                    </el-checkbox-group>
+                                                    </template>
+                                                    <template v-if="item.type === 6">
+                                                    <el-tree
+                                                        :ref="item.id"
+                                                        :data="item.option"
+                                                        check-strictly
+                                                        :default-checked-keys="form.json.field[item.id].value"
+                                                        show-checkbox
+                                                        node-key="id"
+                                                        :props="defaultProps"
+                                                        @check-change="changeField(item.id)"
+                                                    ></el-tree>
+                                                    </template>
+                                                </el-form-item>
+                                            </template>
+                                        </el-form>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="name" show-overflow-tooltip>
+                                    <template slot-scope="scope">
+                                        <div style="display:flex;justify-content: space-between;align-items:center">
+                                            <span>{{ scope.row.name }}</span>
+                                            <span v-if="scope.row.field === 'folder'"><el-button type="primary" size="small" @click="handleFolder(form.reportId)" :disabled="!($permission('/workspace/common/folder_manage') && $r(form.reportId,[1,2]))">文件夹管理</el-button></span>
+                                            <span v-else><el-button type="primary" size="small" @click="handleManage(form.reportId)" :disabled="!($permission('/workspace/common/customField') && $r(form.reportId,[1,2]))">自定义栏位管理</el-button></span>
+                                        </div>
+                                    </template>
+                                </el-table-column>
+                            </el-table>
+                    </div>
+                </template> -->
+                <el-form-item label="作为对比文件">
+                  <el-switch
+                    v-model="form.asCompare"
+                    active-value="1"
+                    active-text="是"
+                    inactive-text="否">
+                  </el-switch>
+                </el-form-item>
+                <el-form-item label="下载内容">
+                    <el-select v-model="form.configCells" multiple collapse-tags style="width:100%">
+                        <el-option v-for="item in patentField"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="定期更新" prop="taskType">
+                    <el-switch v-model="form.taskType" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949" @change="changeTaskType"></el-switch>
+                </el-form-item>
+                <template>
+                    <div v-show="form.taskType">
+                    <el-form-item label="更新间隔" prop="dateType">
+                        <el-select v-model="form.dateType" @change="getDateType" clearable placeholder="请选择更新时间间隔"  style="width:100%">
+                        <el-option v-for="item in options"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="具体更新时间" v-if="form.dateType"  style="width:100%">
+                        <timeChoose :type="form.dateType" @value="handleData" :cron="form.crons"></timeChoose>
+                    </el-form-item>
+                </div>
+                </template>
+            </el-form>
+            <div class="button">
+                <el-button type="primary" size="small" @click="onSubmit" :loading="btnLoading">导入</el-button>
+                <el-button size="small" @click="handleClose">取消</el-button>
+            </div>
+        </div>
+    </el-dialog>
+   
+<!-- 
+    <project-form-drawer @submit="submitProjectForm" :common-data="commonData" ref="projectFormDrawer"/>
+
+    <project-field-drawer @close="handleClose2" ref="projectFieldDrawer" />
+
+    <project-folder-dialog @close="updateFolder" ref="projectFolderDialog" /> -->
+  </div>
+</template>
+
+<script>
+import timeChoose from "@/views/workspace/components/common/timeChoose.vue";
+export default {
+  components: {
+    timeChoose,
+  },
+  props: [],
+  data() {
+    return {
+      isLazy:true,
+      loading:false,
+      btnLoading:false,
+      customField:{},
+      tableData:[
+        {
+            name: '标引',
+            field: 'index'
+        }, 
+        {
+            name: '分类',
+            field: 'classify'
+        }, 
+        {
+            name: '文件夹',
+            field: 'folder'
+        }
+      ],
+      defaultProps: {
+        children: 'children',
+        label: 'name'
+      },
+      dialogVisible:false,
+      form: {},
+      queryParams:{
+        size:10,
+        current:1
+      },
+      reportList: [],
+      commonData:{},
+      options: [
+        {label:'每天',value:'day'},
+        {label:'每周',value:'week'},
+        {label:'每月',value:'month'},
+        {label:'每年',value:'year'},
+      ],
+    //   /1.著录项目 2.权要 3.说明书文本 4.说明书pdf 6.摘要附图
+      patentField:[
+        {
+            value:'1',
+            label:'著录项目'
+        },
+        {
+            value:'2',
+            label:'权利要求'
+        },
+        {
+            value:'3',
+            label:'说明书文本'
+        },
+        {
+            value:'4',
+            label:'说明书pdf'
+        },
+        {
+            value:'6',
+            label:'摘要附图'
+        },
+      ],
+      rules: {
+          reportId: [
+            { required: true, message: '请选择报告', trigger: 'change' }
+          ],
+      }
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    // this.$api.getCommonData({ keys: 'QUERY_GROUP,ENTERPRISE_APPLICATION_SCENARIO,INVESTIGATION_TYPE' }).then(response => {
+    //   this.commonData = response.data
+    // })
+    this.getReportList();
+  },
+  methods: {
+    open(form){
+        this.form = { 
+            ...form,
+            configCells:['1','2','3','4','6'],
+            taskType2:4,
+            taskType:0,
+            configId:2,
+            json: {
+                reportId: 0,
+                field: [],
+                folder: {}
+            }
+        }
+       if(this.form.reportId){
+        this.$set(this.form,'reportId',Number(this.form.reportId))
+        this.queryParams = {
+            current:1,
+            size:10,
+            reportId:this.form.reportId
+          }
+          var index = this.reportList.findIndex(item=>{
+            return item.id == this.form.reportId
+          })
+          if(index==-1){
+            this.$api.QueryReport(this.queryParams).then(response=>{
+              if(response.code == 200){
+                this.loading = false;
+                this.reportList = [...this.reportList, ...response.data];
+                this.queryParams.reportId = null
+              }
+            }).catch(error=>{
+              this.loading = false;
+            })
+          }
+          
+       } 
+        this.dialogVisible=true
+    },
+    //关闭弹窗
+    handleClose(){
+      this.$refs.form.resetFields()
+      this.dialogVisible=false
+    },
+    //导入
+    onSubmit(){
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          
+          this.form.fieldList = []
+          this.form.folderIds = this.form.json.field.folder
+          for (let id in this.form.json.field) {
+              const field = this.form.json.field[id]
+              if (!field) {
+                  continue;
+              }
+              const type = field.type
+              const value = field.value
+              if (value) {
+              if (type === 5 || type === 6) {
+                  value.map(option => {
+                      this.form.fieldList.push({
+                      fieldId: parseInt(id),
+                      type: type,
+                      optionId: option
+                  })
+                  })
+              } else {
+                  this.form.fieldList.push({
+                  fieldId: parseInt(id),
+                  type: type,
+                  optionId: [0, 1, 2].indexOf(type) === -1 ? value : 0,
+                  text: value
+                  })
+              }
+              }
+          }
+          if(!this.form.asCompare){
+            this.form.asCompare = 0
+          }
+          this.btnLoading = true
+          this.$api.addTask(this.form).then(response=>{
+            if(response.code == 200){
+              this.$message.success(response.data)
+              this.btnLoading = false
+              this.handleClose()
+              this.getConfirm()
+            }
+          }).catch(error=>{
+            this.loading = false;
+          })
+        }
+      })
+    },
+    //弹窗
+    getConfirm() {
+      const h = this.$createElement;
+      this.$msgbox({
+        title: '提示',
+        message: h('p', null, [
+          h('span', null, '任务正在导入,查看任务进度请前往 '),
+          h('span', {
+            class:'MessageBoxClass' ,on: {
+            click:()=>{
+                this.toTaskList()
+                // 通过close关闭消息弹窗,this.$confirm就是this.$confirm.close(false),其他同理
+                this.$msgbox.close(false)
+            }
+          }},'任务清单',)
+        ]),
+        type: 'warning',
+        showConfirmButton: false,
+      }).then(action => {
+        
+      });
+      
+    },
+    //跳转到任务清单
+    toTaskList() {
+      // 传专题库id是查到当前专题库的导入任务,不传是查看所有导入任务
+      const router = this.$router.resolve({
+        path: '/taskList',
+      })
+      window.open(router.href,'_blank')
+    },
+    //切换专题库
+    changeProjectId(val){
+        // if(val){
+        //    this.getCustomField(val) 
+        // }
+        
+    },
+    //获取标引类型
+    getCustomField(reportId) {
+      this.$api.getCustomField({ reportId: reportId }).then(response => {
+        this.customField = response.data;
+        ['index', 'classify'].map(key => {
+          this.customField[key].map(item => {
+            let value = null
+            if (item.type === 5 || item.type === 6) {
+              value = []
+            }
+            this.$set(this.form.json.field, item.id, { type: item.type, value })
+          })
+        })
+      })
+    },
+    //打开自定义栏位弹窗
+    handleManage(reportId) {
+      this.$refs.projectFieldDrawer.open(reportId)
+    },
+    //关闭自定义栏位弹窗并更新自定义栏位数据
+    handleClose2(reportId) {
+      this.getCustomField(reportId)
+    },
+    //获取选中的分类节点
+    changeField(id){
+        this.form.json.field[id].value = this.$refs[id][0].getCheckedKeys()
+    },
+    //打开文件夹管理弹窗
+    handleFolder(reportId) {
+      this.$refs.projectFolderDialog.open(reportId)
+    },
+    //关闭文件夹弹窗并更新数据
+    updateFolder(reportId) {
+      this.$api.getProjectFolderList({ reportId: reportId, patentTotal: false }).then(response => {
+        this.customField.folder = response.data
+      })
+    },
+    //获取选中的文件夹
+    changeFolder(data, checked, indeterminate){
+        this.form.json.field.folder = this.$refs.folderTree.getCheckedKeys()
+    },
+    //获取更新周期
+    getDateType(val) {
+      this.form.crons = ''
+    },
+    //是否定期更新
+    changeTaskType(val){
+        if(!val){
+            this.form.dateType = ''
+            this.form.crons = ''
+        }
+    },
+     // 获取时间
+     handleData(val) {
+      if (this.form.dateType=='') {
+        this.$message.error('请先选择更新周期')
+        return false
+      }
+      this.form.crons=val
+    },
+    
+    // 下拉框懒加载
+    lazyLoading() {
+      if(!this.isLazy){
+        return false
+      }
+      this.queryParams.current++;
+      this.getReportList();
+    },
+    //远程搜索
+    remoteMethod(query) {
+      this.isLazy = true
+        if (query !== '') {
+          this.loading = true;
+          this.queryParams = {
+            current:1,
+            size:10,
+            name:query
+          }
+          this.$api.QueryReport(this.queryParams).then(response=>{
+            if(response.code == 200){
+              this.loading = false;
+              this.reportList = response.data
+            }
+          }).catch(error=>{
+            this.loading = false;
+          })
+        } else {
+          this.queryParams.name = null
+          this.reportList = [];
+          this.getReportList()
+        }
+      },
+    //查询报告列表
+    getReportList() {
+      if(!this.isLazy){
+        return false
+      }
+      this.$api.QueryReport(this.queryParams).then(response=>{
+        if(response.code == 200){
+          if(response.data && response.data.length == 0){
+            this.isLazy = false
+          }
+          if(this.form.reportId){
+            var index = response.data.findIndex(item=>{
+              return item.id == this.form.reportId
+            })
+            if(index!=-1){
+              response.data.splice(index,1)
+            }
+          }
+          this.reportList = [...this.reportList, ...response.data];
+        }
+      }).catch(error=>{
+      })
+    },
+    //打开新增专题库弹窗
+    addProject() {
+      this.$refs.projectFormDrawer.open(
+        {
+          update: 0,
+          updateTime: "一天",
+          status: "0",
+          sort: 1,
+          typeList: [],
+          scenarioList: [],
+        },
+        "新增专题库"
+      );
+    },
+    //更新列表
+    submitProjectForm(type) {
+      this.getReportList()
+    },
+  },
+};
+</script>
+<style lang="scss">
+@import "@/assets/css/selectButton.scss";
+</style>
+<style lang="scss" scoped>
+.MessageBoxClass{
+  color: red;
+}
+.MessageBoxClass:hover{
+  cursor:pointer;
+  border-bottom:1px solid red ;
+}
+.button{
+    display: flex;
+    justify-content: center;
+}
+</style>

+ 271 - 0
src/views/components/import/conditionImport/components/search_history.vue

@@ -0,0 +1,271 @@
+<template>
+  <div style="background:white;padding:20px 20px 0;">
+    <el-button @click="deletes()"><i class="iconfont icon-shanchu"></i> 删除<span v-if="multipleSelection.length>0">{{ multipleSelection.length }}条</span><span v-else>所有</span>检索记录</el-button>
+    <el-divider></el-divider>
+    <el-table
+      ref="table"
+      :data="tableData"
+      style="width: 100%"
+      :maxHeight="height - 230"
+      v-loading="loading"
+      :row-key="getRowKeys"
+      @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" :reserve-selection="true">
+
+      </el-table-column>
+      <el-table-column prop="conditions" label="检索式"></el-table-column>
+      <el-table-column prop="dbType" label="检索范围" width="140">
+        <template slot-scope="scope">
+          <div>
+            {{ dbType[scope.row.dbType] }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="time" label="创建/更新时间" width="240">
+        <template slot-scope="scope">
+          <div class="time">
+            <p>创建:{{ scope.row.retrieveTime }}</p>
+            <p>更新:{{ scope.row.updateTime }}</p>
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="totalNum" label="检索结果" width="120">
+        <template slot-scope="scope">
+          <div>
+            {{ scope.row.totalNum }}件
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" width="140">
+        <template slot-scope="scope">
+            <div class="icon">
+                <span @click="editSearch(scope.row)" class="margin-left_10">
+                  <el-tooltip class="item" effect="dark" content="编辑" placement="top">
+                    <i class="iconfont icon-bianji"></i>
+                  </el-tooltip>
+                </span>
+                <span @click="executeSearch(scope.row)" class="margin-left_10">
+                  <el-tooltip class="item" effect="dark" content="再次执行" placement="top">
+                    <i class="iconfont icon-zidongzhihang"></i>
+                  </el-tooltip>
+                </span>
+                <span @click="delSearch(scope.row)" class="margin-left_10">
+                  <el-tooltip class="item" effect="dark" content="删除" placement="top">
+                    <i class="iconfont icon-shanchu"></i>
+                  </el-tooltip>
+                </span>
+            </div>
+        </template>
+      </el-table-column>
+    </el-table>
+<div class="foot">
+  <el-pagination
+          background
+          layout="total, prev, pager, next, jumper"
+          :current-page.sync="queryParams.current"
+          :page-size.sync="queryParams.size"
+          @current-change="handleCurrentChange"
+          @size-change="getList"
+          :total="queryParams.total"
+        >
+        </el-pagination>
+</div>
+    <el-dialog title="编辑检索式" :visible.sync="dialogVisible" width="800px" :before-close="handleClose" :close-on-click-modal="false" append-to-body>
+      <div>
+        <el-form :model="form" label-width="120px" size="small" label-position="right">
+          <el-form-item label="检索范围:">
+            <el-radio-group v-model="form.dbType">
+              <el-radio label="CN">中国专利检索</el-radio>
+              <el-radio label="WD">世界专利检索</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="检索式:">
+            <el-input type="textarea" v-model="form.conditions"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">取 消</el-button>
+        <el-button type="primary" @click="submit" :loading="btnLoading">检 索</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props:['reportId'],
+  data() {
+    return {
+      height:document.documentElement.clientHeight,
+        tableData:[],
+        multipleSelection:[],
+        loading:false,
+        dialogVisible:false,
+        btnLoading:false,
+        queryParams:{
+          size:10,
+          current:1,
+          total:0
+        },
+        dbType:{
+          'CN':'中国专利检索',
+          'WD':'世界专利检索'
+        },
+        form:{},
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getRowKeys(row) {
+      return row.id
+    },
+    open(){
+      this.getList()
+    },
+    handleSelectionChange(val){
+        this.multipleSelection = val
+    },
+    //切换页数
+    async handleCurrentChange(val) {
+      this.queryParams.current = val;
+      await this.getList();
+    },
+    //查询检索历史
+    getList(){
+      this.loading = true
+      this.$api.queryRetrieveRecord(this.queryParams).then(response=>{
+        if(response.code == 200){
+          this.tableData = response.data.records
+          this.queryParams.total = response.data.total
+          this.loading = false
+        }
+      }).catch(error=>{
+        this.tableData = []
+        this.loading = false
+      })
+    },
+    //打开编辑检索历史弹窗
+    editSearch(row){
+      this.form = {
+        dbType:row.dbType,
+        id:row.id,
+        conditions:row.conditions,
+      }
+      this.dialogVisible = true
+    },
+    //关闭编辑检索历史弹窗
+    handleClose(){
+      this.form = {}
+      this.dialogVisible = false
+    },
+    //提交编辑内容
+    submit(){
+      // this.btnLoading = true
+      // this.$api.updateRetrieveRecord(this.form).then(response=>{
+      //   if(response.code == 200){
+      //     this.$message.success('编辑成功')
+      //     this.btnLoading = false
+      //     this.handleClose()
+      //     this.getList()
+      //   }
+      // }).catch(error=>{
+
+      // })
+      const router = this.$router.resolve({
+                path: '/searchResult',
+                query: {
+                    condition:this.form.conditions,
+                    DBType:this.form.dbType,
+                    reportId:this.reportId?this.reportId:null,
+                    retrieveRecordId:null
+                }
+            })
+            // this.$s.setSession('retrieveRecordId',0)
+            this.handleClose()
+            this.getList()
+            window.open(router.href, '_blank');
+    },
+    //执行检索历史
+    executeSearch(row){
+      const router = this.$router.resolve({
+                path: '/searchResult',
+                query: {
+                    condition:row.conditions,
+                    DBType:row.dbType,
+                    reportId:this.reportId?this.reportId:null,
+                    retrieveRecordId:null
+                }
+            })
+            // this.$s.setSession('retrieveRecordId',row.id)
+            window.open(router.href, '_blank');
+    },
+    //检索历史id加入到数组
+    delSearch(row){
+      var a = [row.id]
+      this.deletes(a)
+    },
+    //删除检索历史
+    deletes(val){
+      var arr = {
+        isAll:false
+      }
+      if(val){
+        arr.ids = val
+      }else{
+        if(this.multipleSelection.length>0){
+          arr.ids = this.multipleSelection.map(item=>{return item.id})
+        }else{
+          arr.isAll = true
+          arr.ids = []
+        }
+      }
+      this.$confirm('确认删除吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading = true
+        this.$api.deleteRetrieveRecord(arr).then(response=>{
+          if(response.code == 200){
+            this.$message.success('删除成功')
+            if(this.multipleSelection.length>0){
+              this.multipleSelection = []
+              this.$refs.table.clearSelection();
+            }
+            
+            this.loading = false
+            this.getList()
+          }
+        }).catch(error=>{
+          this.loading = false;
+        })
+      })
+        
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+.time{
+  p{
+    margin:0;
+  }
+}
+.icon{
+  i{
+    font-size:20px;
+  }
+}
+.foot{
+  margin-top:10px;
+  display: flex;
+  justify-content: center;
+}
+</style>

+ 136 - 0
src/views/components/import/conditionImport/customSearch.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="customSearch">
+    <el-container style=" border: 1px solid #eee" :style="{height:height-70+'px'}">
+        <el-aside v-if="DBType == 'WD'">
+             <div>
+                <div class="clearfix">
+                    <span><el-checkbox v-model="checked" @change="change">全部国家地区</el-checkbox></span>
+                    <span style="float: right; padding: 3px 0" type="text">{{ checkList.length }}/{{countryList.length}}</span>
+                </div>
+                    <div style="overflow-y:auto;overflow-x:hidden;" :style="{height:height-120+'px'}">
+                       <el-checkbox-group v-model="checkList">
+                        <div v-for="item in countryList" :key="item.value" class="item">
+                            <el-checkbox :label="item.value">{{ item.label }}({{ item.value }})</el-checkbox>
+                        </div>
+                            
+                        </el-checkbox-group> 
+                    </div>
+                     
+             </div>
+        </el-aside>
+        <el-main>
+            <div>
+                <myFormSearch :logical="logical" :logicalProps="logicalProps" :operator="operator" :field="field" :searchValue="true" @search="search"></myFormSearch>
+            </div>
+        </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+export default {
+  components: {
+  },
+  props: ['countryList','DBType'],
+  data() {
+    return {
+        height:document.getElementsByClassName('el-main')[0].clientHeight,
+        checkList:[],
+        checked:false,
+        //逻辑符
+        logical:[
+                {
+                    name:'并且',
+                    value:'AND'
+                },
+                {
+                    name:'或者',
+                    value:'OR'
+                },
+                {
+                    name:'非',
+                    value:'NOT'
+                },
+            ],
+            logicalProps:{
+                label:'name',
+                value:'value'
+            },
+            //运算符
+            operator:[
+                {
+                    label:'=',
+                    value:'='
+                },
+                // {
+                //     label:'>',
+                //     value:'>'
+                // },
+                // {
+                //     label:'<',
+                //     value:'<'
+                // },
+                // {
+                //     label:'<=',
+                //     value:'<='
+                // },
+            ],
+            //搜索值
+            field:JSON.parse(JSON.stringify(this.$constants.searchField)),
+    };
+  },
+  watch: {
+    'checkList'(val){
+      if(val.length == this.countryList.length){
+        this.checked = true
+      }else{
+        this.checked = false
+      }
+    },
+    DBType(){
+      this.getField()
+    },
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.getField()
+  },
+  methods: {
+    getField(){
+      var a = JSON.parse(JSON.stringify(this.$constants.searchField))
+      this.field = a.map(item=>{ 
+        item.children = item.children.filter(item1 =>{return item1.value!='GJ' && item1.type != (this.DBType != 'WD'?'2':'1')}) 
+        return item
+      })
+    },
+    search(val){
+      if(this.DBType == 'WD' && this.checkList.length>0){
+        var str = `${val} AND (GJ=${this.checkList})`
+        this.$emit('search',str)
+      }else{
+        this.$emit('search',`${val}`)
+      }
+      
+    },
+    change(val){
+      if(val){
+        this.checkList = this.countryList.map(item=>item.value)
+      }else{
+        this.checkList = []
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+
+  .clearfix {
+    // padding-left:20px ;
+    padding:10px 20px ;
+    border-bottom: 1px solid #eeeeee;
+  }
+  .item{
+    padding:10px 20px;
+  }
+</style>

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

@@ -0,0 +1,37 @@
+<template>
+  <div style="background:white">
+    <search :reportId="reportId" :asCompare="asCompare" :projectId="projectId"></search>
+  </div>
+</template>
+
+<script>
+import search from './search.vue';
+export default {
+  components: {
+    search
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {
+    reportId(){
+        return this.$route.query.reportId
+    },
+    projectId() {
+      return this.$route.query.projectId
+    },
+    asCompare() {
+      return this.$route.query.asCompare
+    }
+    
+  },
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 197 - 0
src/views/components/import/conditionImport/patentDetails/PatentList.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="change-patent" style="background:white;display:flex; justify-content:flex-end" key="1"> 
+    <el-button type="" size="small" :disabled="prev==0||ban==1" @click="handleLink(records[index-1],'prev')" >
+      <span class="p"><i class="el-icon-arrow-up"></i>
+        <span>上一篇</span>
+      </span>
+      <span class="n" v-if="prev">
+        <span>{{ records[index-1].patentNo }}</span>
+      </span>
+      <span class="n" v-else>无数据</span>
+    </el-button>
+    <div style="width:120px;height:50px;border-radius:5px ;border:1px solid #DCDCDC;display:flex; justify-content:flex-start;margin:0 10px">
+      <div class="t" style="min-width:50px;text-align:center;line-height:50px;border-right:1px solid #DCDCDC;" v-if="prev>0">{{ prev }}</div>
+      <div class="t" style="min-width:50px;text-align:center;line-height:50px" v-if="next">{{ next }}</div>
+      </div>
+    <el-button type="" size="small" :disabled="next==0||ban==1" @click="handleLink(records[index+1],'next')" >
+      <span class="p">
+        <i class="el-icon-arrow-down"></i>
+        <span>下一篇</span>
+      </span>
+      <span class="n" v-if="next">
+        <span>{{ records[index+1].patentNo }}</span>
+      </span>
+      <span class="n" v-else>无数据</span>
+    </el-button>
+  </div>
+</template>
+
+<script>
+
+export default {
+  mixins: [],
+  props: ['ban'],
+  data() {
+    return {
+      queryParams: {},
+      records: [],
+      total: 0,
+      loading: false,
+      index:0,
+      prev:0,
+      next:0,
+      isNext:false,
+      isPrev:false
+    }
+  },
+  watch: {
+  },
+  async mounted() {
+      var index = this.$s.getSession('params').index
+      this.index = index%10
+      this.queryParams = this.$s.getSession('params').params
+      this.queryParams.PageNum = Math.floor(index/10)+1
+      this.queryParams.RowCount = 10
+      
+      if(this.index == 9){
+        this.isNext = true
+        this.queryParams.RowCount = 20
+      }
+      if(this.index == 0 && this.queryParams.PageNum != 1){
+        this.isPrev = true
+        this.queryParams.PageNum -= 1
+        this.queryParams.RowCount = 20
+        this.index = 10
+      }
+     await this.getPatentList()
+  },
+  methods: {
+   async getPatentList(val) {
+      // this.loading = true
+     await this.$api.patentSelectImport(this.queryParams).then(response=>{
+        if(response.code == 200){
+          var params = this.$s.getSession('params')
+          var prev = ''
+          if(this.index == 9){
+            this.queryParams.RowCount = 10
+            prev = ((this.queryParams.PageNum-1)*this.queryParams.RowCount + this.index)
+          }else{
+            prev = this.queryParams.PageNum>1?((this.queryParams.PageNum-2)*this.queryParams.RowCount + this.index):((this.queryParams.PageNum-1)*this.queryParams.RowCount + this.index)
+          }
+          if(!val){
+            if(this.index == 10){
+              // this.queryParams.PageNum += 1
+              this.queryParams.RowCount = 10
+            }
+          }
+          
+          this.total =response.data.total
+          // this.$set(this,'prev',this.queryParams.PageNum>1?((this.queryParams.PageNum-2)*this.queryParams.RowCount + this.index):((this.queryParams.PageNum-1)*this.queryParams.RowCount + this.index))
+          this.$set(this,'prev',prev)
+          this.$set(this,'next',this.total>2?((this.total - this.prev - 1)<0?0:(this.total - this.prev - 1)):0)
+          // this.prev = (this.queryParams.PageNum-1)*this.queryParams.RowCount + this.index
+          // this.next = this.total>2?((this.total - this.prev - 1)<0?0:(this.total - this.prev - 1)):0
+          if(val == 'prev'){
+            this.$set(this,'records',response.data.records.concat(this.records))
+          }else{
+            this.$set(this,'records',this.records.concat(response.data.records))
+          }
+          // this.records = this.records.concat(response.data.records)
+          params.index = this.prev
+          this.$s.setSession('params',params)
+          // this.loading = false
+          
+        }
+      }).catch(error=>{
+        this.loading = false
+      })
+    },
+  handleLink(item,type) {
+      this.$emit('on-change', item)
+      
+      if(type == 'prev'){
+          this.index =this.index - 1
+          this.prev -=1
+          this.next +=1
+          if(this.index <= 1){
+              if(this.queryParams.PageNum>1){
+                  this.index += 10
+                  if(this.isNext){
+                    this.queryParams.PageNum -= 2
+                  }else{
+                    this.queryParams.PageNum -= 1
+                  }
+                  this.isPrev = true
+                  this.isNext = false
+                  this.getPatentList(type)
+                  this.$nextTick(()=>{
+                      this.records.splice(10,10)
+                  })
+              }
+          }
+      }else{
+        if(this.prev>=9999){
+          this.$message.warning('系统不能查看10000条以后的数据!!!')
+          return false
+        }
+          this.index =this.index + 1
+          this.prev +=1
+          this.next-=1
+          
+          if(this.records.length==20 && this.index == 18){
+              this.index -= 10
+              if(this.isPrev){
+                    this.queryParams.PageNum += 2
+                  }else{
+                    this.queryParams.PageNum += 1
+                  }
+                  this.isPrev = false
+                  this.isNext = true
+              this.getPatentList(type)
+              this.$nextTick(this.records.splice(0,10))
+          }else if(this.records.length<=10 && this.index == 8){
+            this.queryParams.PageNum += 1
+              this.getPatentList(type)
+          }
+      }
+      var params = this.$s.getSession('params')
+      params.index = this.prev
+      this.$s.setSession('params',params)
+    },
+  }
+}
+</script>
+
+<style lang="scss">
+.change-patent {
+  padding: 10px;
+  .el-button {
+    height: 50px;
+    width: 100%;
+    margin-left: 0 !important;
+  
+    // margin-top: 10px;
+    text-align: left;
+    font-size: 12px;
+    .p {
+      display: block;
+      margin-bottom: 5px;
+      color: black;
+      .t {
+        height: 50px;
+        width: 100px;
+        border: 1px solid #797979;
+        padding-left: 10px;
+        color: #1e9fff;
+        font-size: 14px;
+        font-weight: bold;
+      }
+    }
+    .n {
+      margin-left: 18px;
+      font-size: 12px;
+      color: #797979;
+    }
+  }
+}
+</style>

+ 279 - 0
src/views/components/import/conditionImport/patentDetails/patentDetail.vue

@@ -0,0 +1,279 @@
+<template>
+    <div>
+        <div class="patent-articles" >
+            <el-container v-loading="loading">
+                <el-container >
+                    <el-header class="patent-articles-title">
+                        <div class="patent-articles-title-box">
+                            <div style="position:relative">
+                                <img src="@/assets/visual/fixed.png" width="20px" height="20px" v-if="fix===true" @click="qx" style="position:absolute;top:5px;left:5px"/>
+                                <img src="@/assets/visual/unfixed.png" width="20px" height="20px" v-if="fix===false"  @click="gd" style="position:absolute;top:5px;left:5px"/>
+                                <div>
+                                    <span v-html="getViewDom(patent.patentNo)"></span>
+                                    <el-tag type="primary" effect="dark" size="mini" class="margin-left_10">{{ patent.simpleStatus }}</el-tag>
+                                </div>
+                                <div style="color: #6b6868; font-size: 15px;border-bottom: 1px solid #e6e6e6;padding-bottom: 5px;">
+                                    <span v-html="getViewDom2(patent, 'name')"></span>
+                                    <el-link v-if="projectId" type="primary" @click.native="handleChange(patent, 'name')" style="margin-left: 10px;margin-top: -3px;">
+                                        <span v-if="!patent.change">切换译文</span>
+                                        <span v-else>切换原文</span>
+                                    </el-link>
+                                </div>
+                            </div>
+                            <div  style="  position: relative;">
+                                <el-link v-for="item in menuList" :type="activeMenu === item.value ? 'primary' : undefined" v-if="!item.show" @click.native="handleSelect(item.value)">
+                                {{ item.label }}
+                                <!-- <span v-if="item.value == 'PatentImage'|| item.value=='PatentPDF'" @click.stop="ending(item.value)">
+                                    <el-popover
+                                        placement="right"
+                                        width="400"
+                                        trigger="click">
+                                        <el-radio v-for="(item, index) in positionList" :key="index" v-model="radio" @input="changePosition"  :label="item.value">{{item.label}}</el-radio>
+                                        <i class="el-icon-setting" slot="reference"></i>
+                                    </el-popover>
+                                    </span> -->
+                                </el-link>
+                            </div>
+                        </div>
+                    </el-header>
+                    <el-main class="patent-articles-content" style="padding-left:30px">
+                        <div class="patent-articles-content-left">
+                            <!-- <div class="dom1 box1" v-dragControllerDiv1 style="display:flex;width:100%">
+                                <div class="component left1" style="width:100%;overflow-y:auto;overflow-x: hidden;" :style="{height:height}"> -->
+                                    <component style="width:100%;height:100%" :style="{height:height}" :is="componentName" :patent="patent" :patentNo="[patent.patentNo]" :domId="patent.patentNo + '1'"  :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" @refresh="getPatent(applicationNo)"></component>
+                                <!-- </div> -->
+                                <!-- <div class="resize2" title="收缩侧边栏" v-show="(radio == 2 || radio == 3) && activeMenu != activeMenu2"><p><span>˙</span><span>˙</span><span>˙</span></p></div>
+                                <div class="resize1" title="收缩侧边栏" v-show="(radio == 4 || radio == 5) && activeMenu != activeMenu2"><span>⋮</span></div>
+                                <div v-show="radio != 1 && activeMenu != activeMenu2" class="mid1" :style="{height:(radio == 4 || radio == 5)?height:'280px'}" style="width:450px;height:280px;border:1px solid #E4E7ED;overflow-y:auto;overflow-x: hidden;">
+                                    <component :is="activeMenu2" :patent="patent" :patent-id="patentId" :pdfType1="(patent.pdf && patent.pdf.length>0)?patent.pdf[0].type:2" :sign="true"></component>
+                                </div> -->
+                            <!-- </div> -->
+                        </div>
+                    </el-main>
+                </el-container>
+            </el-container>
+            <div class="content-main" style="padding-left:40px"></div>
+        </div>
+    </div>
+</template>
+
+<script>
+import { changeTranslation, patentKeywordsHighlight } from '@/views/workspace/folder/components/mixins'
+
+import PatentField from '@/views/workspace/folder/articles/components/PatentField'
+import PatentAnnotation from '@/views/workspace/folder/articles/components/PatentAnnotation'
+import PatentBasic from "@/views/workspace/folder/articles/components/PatentBasic"
+import PatentPDF from "@/views/workspace/folder/articles/components/PatentPDF"
+import PatentImage from "@/views/workspace/folder/articles/components/PatentImage"
+import PatentRight from "@/views/workspace/folder/articles/components/PatentRight"
+import PatentInstruction from "@/views/workspace/folder/articles/components/PatentInstruction"
+import PatentFamily from "@/views/workspace/folder/articles/components/PatentFamily"
+import PatentStatus from "@/views/workspace/folder/articles/components/PatentStatus"
+
+export default {
+  components: {
+    PatentField,
+    PatentAnnotation,
+    PatentBasic,
+    PatentPDF,
+    PatentImage,
+    PatentRight,
+    PatentFamily,
+    PatentStatus,
+    PatentInstruction,
+  },
+  props: ['applicationNo','projectId'],
+  mixins: [patentKeywordsHighlight, changeTranslation],
+  data() {
+    return {
+        radio:1,
+        height:null,
+        loading:false,
+        fix:false,
+        activeMenu: 'PatentBasic',
+        activeMenu2:'',
+        componentName: 'PatentBasic',
+        menuList: [
+            {
+                value: 'PatentBasic',
+                label: '基础信息'
+            },
+            {
+                value: 'PatentRight',
+                label: '权利要求'
+            },
+            {
+                value: 'PatentImage' ,
+                label:'附图'
+            },
+            {
+                value: 'PatentInstruction',
+                label: '说明书文本'
+            },
+            {
+                value: 'PatentFamily',
+                label: '同族专利'
+            },
+            {
+                value: 'PatentStatus',
+                label: '事务数据'
+            },
+            {
+                value: 'PatentPDF',
+                label: '说明书'
+            },
+        ],
+        positionList:[
+            {
+                label:'tab展示',
+                value:1
+            },
+            {
+                label:'上边展示',
+                value:2
+            },
+            {
+                label:'下边展示',
+                value:3
+            },
+            {
+                label:'左边展示',
+                value:4
+            },
+            {
+                label:'右边展示',
+                value:5
+            },
+        ],
+        patent:{},
+    };
+  },
+  watch: {
+    applicationNo(val){
+        if(this.fix!=true){
+          this.getPatent(val)
+        }
+    },
+    fix(val){
+        this.$emit('on-change',val)
+    },
+  },
+  computed: {},
+  created() {},
+  async mounted() {
+   await this.getPatent(this.applicationNo)
+   this.changePageTitle()
+   this.$nextTick(()=>{
+        this.$set(this,'height',document.getElementsByClassName('el-main')[0].offsetHeight-200  + 'px')
+     })
+  },
+  methods: {
+     //修改title
+     changePageTitle() {
+      document.title = `${this.patent.patentNo} ${this.patent.name || ''}`
+    },
+    //解除定住,可以切换
+    qx(){
+      this.fix=false
+    },
+    //定住不能切换
+    gd(){
+      this.fix=true
+    },
+    //切换显示内容
+    handleSelect(index) {
+    //   if(index == this.activeMenu2){
+    //     this.activeMenu2 = ''
+    //     this.radio = 1
+    //     this.changePosition(this.radio)
+    //   }
+      this.activeMenu = index
+      this.componentName = index
+    },
+    //获取专利信息
+    async getPatent(applicationNo){
+        var params =this.$s.getSession('params').params
+        params.CurrentQuery = "(AN="+ applicationNo +")"
+        params.PageNum = 1
+        // params.retrieveRecordId = null
+        this.loading = true
+       await this.$api.patentSelectImport(params).then(response=>{
+          if(response.code == 200){
+            this.patent = response.data.records[0]
+            this.loading = false
+          }
+        }).catch(error=>{
+          this.loading = false
+        })
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.patent-articles {
+  width: 100%;
+  height: 100% !important;
+  padding: 0 !important;
+  .patent-articles-menu {
+
+  }
+  .el-menu-item.is-active {
+    background: #ecf5ff !important;
+    color: #409EFF!important;
+  }
+  .patent-articles-title {
+    padding: 0 !important;
+    height: 100px !important;
+    .el-link {
+      margin-right: 20px;
+    }
+    .patent-articles-title-box {
+      font-size: 20px;
+      width: 100%;
+      text-align: center;
+    }
+  }
+  .patent-articles-content {
+    background: #fff;
+    padding: 0;
+    height: 100%;
+    overflow: hidden;
+    .patent-articles-content-left {
+        width:100%;
+      float: left;
+      height: 100%;
+      overflow-y: auto;
+      overflow-x: hidden;
+      padding: 10px;
+    }
+    .patent-articles-content-right {
+      width: 300px;
+      border-left: 1px solid #e6e6e6;
+      float: right;
+      height: 100%;
+      .el-header {
+        height: 50px !important;
+        position: relative !important;
+      }
+      .el-main {
+        padding: 0 12px !important;
+      }
+      .el-container, .el-main {
+        height: 100%;
+      }
+      .patent-articles-option {
+        position: absolute;
+        bottom: 0;
+        height: 100%;
+        left: 50px;
+        .el-tabs {
+          margin-top: 9px;
+        }
+        .el-tabs__header {
+          margin-bottom: 0 !important;
+        }
+      }
+    }
+  }
+}
+</style>

+ 141 - 0
src/views/components/import/conditionImport/patentDetails/patentIndex.vue

@@ -0,0 +1,141 @@
+<template>
+    <div style="height:calc(100% - 50px)">
+        <div style="background:white;display:flex; justify-content:flex-end;align-items: center;">
+            <el-button type="primary" class="margin-right_10" @click="importToProject">导入到报告</el-button>
+            <el-switch
+                v-model="value"
+                :disabled="!$permission('/workspace/details/comparison')"
+                inactive-text="对比"
+                active-color="#00BFFF"
+                inactive-color="#D3D3D3">
+            </el-switch>
+            <PatentList @on-change="onChange" :ban='ban'/>
+        </div> 
+        <div class="box" ref="box" v-dragControllerDiv>
+            <div class="left" :style="{width:width}"><!--左侧div内容-->
+                <PatentDetail :applicationNo="applicationNo" @on-change='changefix' />
+            </div>
+            <div class="resize" title="收缩侧边栏"   v-show="width!='100%'">⋮</div>
+            <div class="mid" v-show="width!='100%'" :style="{width:width}"><!--右侧div内容-->
+                <PatentDetail :applicationNo="applicationNo" @on-change='changefix' />
+            </div>
+        </div> 
+
+        <Project-List-Dialog ref="projectListDialog"></Project-List-Dialog>
+  </div>
+</template>
+
+<script>
+import PatentDetail from './patentDetail.vue';
+import PatentList from './PatentList.vue'
+import ProjectListDialog from '../components/projectListDialog.vue'
+export default {
+  components: {
+    PatentDetail,
+    PatentList,
+    ProjectListDialog
+  },
+  props: {},
+  data() {
+    return {
+        ban:0,
+        value: false,
+        width:'100%',
+        applicationNo:this.$route.query.applicationNo || null,
+        patentNo:this.$route.query.patentNo || null,
+    };
+  },
+  watch: {
+    value(val){
+      if(val==true){
+        this.width='50%'
+      }else{
+        this.width='100%'
+      }
+    },
+  },
+  computed: {
+    contrastList() {
+      return this.$store.state.report.contrastList
+    }
+  },
+  created() {},
+  mounted() {
+    this.getContrastList(this.patentNo)
+  },
+  methods: {
+    //导入到专题库
+    importToProject(){
+      var params =this.$s.getSession('params').params
+      var form = {
+        conditions:"AN="+ this.applicationNo ,
+        DBType:params.DBType,
+        orderBy:params.OrderBy,
+        orderByType:params.OrderByType,
+        startNumber:1,
+        endNumber:0,
+        isAddPatentNos:[this.applicationNo],
+        isDeletePatentNos:[],
+        reportId:this.$s.getSession('params').reportId,
+        asCompare:this.$s.getSession('params').asCompare
+      }
+      this.$refs.projectListDialog.open(form)
+    },
+    //修改定住
+    changefix(){
+
+    },
+    //切换专利
+    async onChange(val){
+        this.applicationNo = val.applicationNo
+        this.patentNo = val.patentNo
+       
+        this.changePageTitle(val.patentNo,val.name)
+        this.getContrastList(val.patentNo)
+        await this.$router.push({
+          path: '/search/patentDetail',
+          query: {
+            applicationNo: val.applicationNo,
+            patentNo: val.patentNo,
+          }
+        })
+    },
+    // 查询批注
+    getContrastList(val) {
+      if (val) {
+        var index = this.contrastList.findIndex(item => {
+          item.patentNo == val
+        })
+        if (index != -1) {
+          return false;
+        }
+      }
+      let params = {
+        patentNo: val?val:this.patentNo,
+        id: this.reportId,
+        createFrom:this.reportId?2:0
+      }
+      this.$api.scratchWordsQuery(params).then(response => {
+        if (response.code==200) {
+          if (this.contrastList.length > 0) {
+             var a = this.contrastList.filter(item => {
+              return item.patentNo != params.patentNo
+             }).concat(response.data)
+          } else {
+             var a = response.data
+          }
+          this.$store.commit('SET_PATENT_PIZHU_CONTRAST', a)
+        }
+      })
+    },
+    //修改title
+    changePageTitle(patentNo,name) {
+      document.title = `${patentNo} ${name || ''}`
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+@import '@/assets/css/activeDiv.scss';
+
+</style>

+ 147 - 0
src/views/components/import/conditionImport/search.vue

@@ -0,0 +1,147 @@
+<template>
+    <div style="background:white">
+        <div class="head">
+            <div class="menu">
+                <span class="type">
+                    <el-radio-group v-model="DBType">
+                        <el-radio label="CN">中国专利检索</el-radio>
+                        <el-radio label="WD">世界专利检索</el-radio>
+                    </el-radio-group>
+                </span>
+                  <el-link :type="isComponent === 'FormSearch' ? 'primary' : undefined" @click="changeComponent('FormSearch')" >表格检索</el-link>
+                  <el-link :type="isComponent === 'customSearch' ? 'primary' : undefined" @click="changeComponent('customSearch')">高级检索</el-link>
+                  <el-link :type="isComponent === 'AdvancedSearch' ? 'primary' : undefined" @click="changeComponent('AdvancedSearch')">专家检索</el-link>  
+                <span class="icon">
+                    <i class="iconfont icon-shouye" @click="openHistory"></i>
+                </span>
+            </div> 
+        </div>
+        
+        <div style="width:70%;margin:0 auto;">
+            <component :is='isComponent' @search="search" :countryList="countryList" :DBType="DBType"></component>
+        </div>
+
+        <el-dialog title="检索历史" :visible.sync="dialogVisible" width="1200px" :close-on-click-modal="false">
+            <div>
+                <searchHistory ref="searchHistory" :reportId="reportId" :projectId="projectId"></searchHistory> 
+            </div>
+        </el-dialog>
+        
+    </div>
+</template>
+<script>
+import FormSearch from './FormSearch.vue';
+import AdvancedSearch from './AdvancedSearch.vue';
+import customSearch from './customSearch.vue'
+
+import searchHistory from './components/search_history.vue';
+export default {
+    components:{
+        FormSearch,
+        AdvancedSearch,
+        customSearch,
+        searchHistory
+    },
+    props:['reportId','asCompare','projectId'],
+    data() {
+        return {
+            isComponent:'FormSearch',
+            countryList:[],
+            DBType:"CN",
+            dialogVisible:false,
+        }
+    },
+    mounted() {
+        this.getCountry()
+    },
+    methods: {
+        //获取国家
+        getCountry(){
+            var str = 'AD 安道尔 AE 阿拉伯联合酋长国 AF 阿富汗 AG 安提瓜和巴布达 AI 安圭拉岛 AL 阿尔巴尼亚 AM 亚'
+                    +'美尼亚 AN 荷属安的列斯群岛 AO 安哥拉 AP 非洲地区工业产权组织(ARIPO) AR 阿根廷 AT 奥地'
+                    +'利 AU 澳大利亚 AW 阿鲁巴岛(荷) BA 波斯尼亚和黑塞哥维那(波黑) BB 巴巴多斯 BD 孟加拉 AZ'
+                    +'阿塞拜疆 BE 比利时 BF 布基纳法索 BG 保加利亚 BH 巴林 BI 布隆迪 BJ 贝宁 BM 百慕大 BN 文'
+                    +'莱 BO 玻利维亚 BR 巴西 BS 巴哈马 BT 不丹 BV 布韦岛 BW 博茨瓦那 BX 比、荷、卢经济联盟商'
+                    +'标局及外观设计局 BY 白俄罗斯 BZ 伯利兹 CA 加拿大 CD 刚果民主共和国 CF 中非共和国 CG 刚'
+                    +'果 CH 瑞士 CI 科特迪瓦 CK 库克群岛 CL 智利 CM 喀麦隆 CN 中国 CO 哥伦比亚 CR 哥斯达黎'
+                    +'加 CU 古巴 CV 佛得角 CY 塞浦路斯 CZ 捷克共和国 DE 德国 DJ 吉布提 DK 丹麦 DM 多米尼克'
+                    +'DO 多米尼加共和国 DZ 阿尔及利亚 EA 欧亚专利组织(EAPO) EC 厄瓜多尔 EE 爱沙尼亚 EG 埃'
+                    +'及 EH 西撒哈拉 EM 内部市场协调局(OHIM) EP 欧洲专利局(EPO) ER 厄立特里亚 ES 西班牙 ET 埃'
+                    +'塞俄比亚 FI 芬兰 FJ 斐济 FK 福克兰群岛(马尔维纳斯群岛) FO 法罗群岛 FR 法国 GA 加蓬 GB 英'
+                    +'国 GD 格林纳达 GH 加纳 GC 海湾地区阿拉伯国家合作委员会专利局(GCC) GE 格鲁吉亚 GI 直布罗'
+                    +'陀 GL 格陵兰 GM 冈比亚 GN 几内亚 GQ 赤道几内亚 GR 希腊 GS 南乔治亚和南三维治群岛 GT'
+                    +'危地马拉 GW 几内亚比绍 GY 圭亚那 HK 中华人民共和国香港特别行政区 HN 洪都拉斯 HR 克罗地'
+                    +'亚 HT 海地 HU 匈牙利  WO 世界知识产权组织国际局(WIPO) ID 印度尼西亚 IE 爱尔兰 IL 以色'
+                    +'列 IN 印度 IQ 伊拉克 IR 伊朗,伊斯兰共和国'
+                var regx = new RegExp("[A-Z]{2} ", "g")
+                var a = str.split(regx)
+                a.splice(0,1)
+                var b = str.match(regx)
+                b.forEach((item,index)=>{
+                    this.countryList.push({
+                        label:a[index],
+                        value:item
+                    })
+                })
+        },
+        changeComponent(val){
+            this.isComponent = val
+        },
+        search(val){
+            this.$router.push({
+                path: '/searchResult',
+                query: {
+                    condition:val,
+                    DBType:this.DBType,
+                    reportId:this.reportId?this.reportId:null,
+                    projectId:this.projectId?this.projectId:null,
+                    retrieveRecordId:null,
+                    asCompare:this.asCompare
+                }
+            })
+            // this.$s.setSession('retrieveRecordId',0)
+            // window.open(router.href, '_blank');
+        },
+        openHistory(){
+            // this.dialogVisible = true
+            // this.$nextTick(()=>{
+            //     this.$refs.searchHistory.open()
+            // })
+            const router = this.$router.resolve({
+                path: '/searchHistory',
+            })
+            window.open(router.href, '_blank');
+        },
+
+    },
+}
+</script>
+<style lang="scss" scoped>
+.head{
+    background: rgb(223 223 223);
+    line-height: 50px;
+    text-align: center;
+}
+.menu{
+    width:70%;
+    margin:0 auto;
+    position: relative;
+    .el-link{
+        margin-right: 20px; 
+    } 
+    .type{
+        position: absolute;
+        left:0;
+        top:0;
+    }
+    .icon{
+        
+        position: absolute;
+        right:0;
+        top:0;
+        i{
+            font-size:24px;
+        }
+    }
+}
+</style>

+ 507 - 0
src/views/components/import/conditionImport/searchResult.vue

@@ -0,0 +1,507 @@
+<template>
+  <div style="background: white; height: 100%">
+    <el-container style="padding: 0 20px">
+      <el-header
+        class="workspace-content-container-header"
+        style="display: flex; justify-content: space-between"
+      >
+        <div>
+          <el-button-group class="margin-left_10">
+            <el-tooltip v-for="item in viewList" class="item" effect="dark" :content="item.title" placement="top">
+              <el-button @click="handleChangeView(item)" size="small" :type="viewSelected === item.value ? 'primary' : ''" :icon="item.btn"></el-button>
+            </el-tooltip>
+          </el-button-group>
+          <span v-if="selectedTotal>0" >
+            已勾选 <b>{{ selectedTotal }}</b> 条
+          </span>
+        </div>
+        
+        <div style="max-width:calc(100% - 620px)">
+          <p><span>条件:</span>{{ condition }}</p>
+        </div>
+        <div>
+          <el-button type="primary" size="small" @click="importToProject">导入到报告</el-button>
+          <el-button size="small" type="warning" @click="handleFieldManage">显示栏位管理</el-button>
+          <el-popover placement="bottom" title="" width="220" trigger="click">
+            <el-main class="patent-fast-edit-popover" v-loading="selectNumberLoading">
+              <div class="btn" @click="handleSelectNumber(0)">本页选择</div>
+              <div class="btn" @click="handleSelectNumber(1)">全部选择</div>
+              <el-divider></el-divider>
+              <div class="select-number">
+                <span>从</span>
+                <el-input size="mini" v-model="queryParams.startNumber" @change="change1"></el-input>
+                <span>到</span>
+                <el-input size="mini" v-model="queryParams.endNumber" @change="change2"></el-input>
+                <el-button type="text" size="" @click="handleSelectNumber(2)">确定</el-button>
+              </div>
+            </el-main>
+            <el-button type="info" size="small" class="margin-left_10" slot="reference"> 选择专利<i class="el-icon-arrow-down el-icon--right"></i></el-button>
+          </el-popover>
+          <el-button type="text" size="small" class="margin-left_10" @click="handleCancelSelectNumber">取消选择</el-button>
+        </div>
+      </el-header>
+      <el-main id="patent-list-container" v-loading="loading">
+        <div :style="{height:divHeight+'px'}">
+          <component
+            ref="patentViewList"
+            :is="viewSelected"
+            @select-change="handleSelect"
+            :selected.sync="queryParams.selected"
+            :patentNoList.sync="patentNoList"
+            :view-field="patentViewField"
+            @on-sort="handleSort"
+            @addSelect="getChoosePatentNo"
+          ></component>
+        </div>
+      </el-main>
+      <el-footer class="workspace-content-patent-page foot-total">
+        <span class="total">共{{ total }}条</span>
+        <el-pagination
+          background
+          layout="total, sizes, prev, pager, next, jumper"
+          :current-page.sync="queryParams.current"
+          :page-size.sync="queryParams.size"
+          :page-sizes="pageSizes"
+          :page-count="getPageCount()"
+          @current-change="handleCurrentChange"
+          @size-change="getList"
+        >
+        </el-pagination>
+      </el-footer>
+    </el-container>
+
+    <patent-view-field @reset="getPatentViewField(true)" @update="updatePatentViewField" ref="patentViewField"/>
+    <Project-List-Dialog ref="projectListDialog"></Project-List-Dialog>
+  </div>
+</template>
+
+<script>
+import PatentViewField from "@/views/product/components/relatedPatents/components/dialog/PatentViewField.vue";
+import PatentTableListView from "./view/Table";
+import PatentAbstractListView from "./view/Abstract";
+import PatentPictureListView from "./view/Picture";
+import ProjectListDialog from "./components/projectListDialog.vue";
+export default {
+  components: {
+    PatentViewField,
+    PatentTableListView,
+    PatentAbstractListView,
+    PatentPictureListView,
+    ProjectListDialog,
+  },
+  props: ["condition", "DBType",'reportId','retrieveRecordId','asCompare'],
+  data() {
+    return {
+      pageSizes:[10, 20, 30, 40, 50],
+      viewSelected: "patent-table-list-view",
+      viewList: [
+        {
+          value: "patent-table-list-view",
+          title: "表格视图",
+          btn: "el-icon-tickets",
+        },
+        {
+          value: "patent-abstract-list-view",
+          title: "摘要视图",
+          btn: "el-icon-news",
+        },
+        {
+          value: "patent-picture-list-view",
+          title: "图片视图",
+          btn: "el-icon-picture-outline",
+        },
+      ],
+      patentNoList: [],
+      queryParams: {
+        selected: [],
+        current: 1,
+        size: 10,
+        isAdd: [],
+        isDelete: [],
+        OrderBy:"AD",
+        OrderByType:"DESC",
+        retrieveRecordId:this.retrieveRecordId,
+        asCompare:this.asCompare
+      },
+      patentViewField: [],
+      tableData:[],
+      total: 0,
+      selectNumberLoading: false,
+      loading: false,
+      selectedTotal:0,
+      startNumber: 1,
+      endNumber: 0,
+      quickSelect: false,
+      quickSelectArr:[],
+      divHeight:null
+    };
+  },
+  watch: {},
+  computed: {
+    records() {
+      return this.$store.state.patent.records;
+    },
+  },
+  created() {},
+  async mounted() {
+    if(this.$s.getSession('queryParams')&&this.$s.getSession('queryParams').params.retrieveRecordId){
+        this.queryParams.retrieveRecordId = this.$s.getSession('queryParams').params.retrieveRecordId
+      }
+    this.$nextTick(()=>{
+      this.divHeight = document.getElementsByClassName('el-main')[0].offsetHeight - 250
+    })
+  await  this.getList();
+    this.getPatentViewField();
+    
+  },
+  methods: {
+    //导入到专题库
+    importToProject() {
+      var form = {
+        conditions:this.condition,
+        DBType:this.DBType,
+        orderBy:this.queryParams.OrderBy,
+        orderByType:this.queryParams.OrderByType,
+        startNumber:this.selectedTotal>0?this.startNumber:1,
+        endNumber:this.selectedTotal>0?this.endNumber:this.total,
+        isAddPatentNos:this.queryParams.isAdd,
+        isDeletePatentNos:this.queryParams.isDelete,
+        reportId:this.reportId,
+        asCompare:this.asCompare,
+      }
+      this.$refs.projectListDialog.open(form);
+    },
+    //切换页数
+    async handleCurrentChange(val) {
+      this.queryParams.current = val;
+      this.patentNoList = []
+      await this.getList();
+      this.$nextTick(()=>{
+        if(this.quickSelect){
+          this.commonSwitch()
+        }else{
+          if(this.queryParams.isAdd.length>0){
+            this.getHaveChoose([])
+          }
+        }
+      })
+    },
+    //获取最大页数
+    getPageCount(){
+      var a = Math.ceil(Number(this.total)/Number(this.queryParams.size))
+      return a>200?200:a
+    },
+    //开始条数校验
+    change1(val) {
+      if (!isNaN(val)) {
+         if (!val || val <= 0) {
+          this.queryParams.startNumber=1
+        } else {
+          if (this.queryParams.startNumber>this.total) {
+            this.queryParams.startNumber=this.total
+          }
+        }
+      } else {
+        this.queryParams.startNumber=1
+      }
+    },
+     //结束条数校验
+    change2(val) {
+      if (!isNaN(val)) {
+        if (!val || val <= 0) {
+          this.queryParams.endNumber = this.total
+        } else {
+          if (this.queryParams.endNumber > this.total) {
+            this.queryParams.endNumber = this.total
+          }
+        }
+      }else {
+        this.queryParams.endNumber=this.total
+      }
+    },
+    //查询专利
+    async getList() {
+      let queryParams = JSON.parse(JSON.stringify(this.queryParams));
+      var params = {
+        CurrentQuery: this.condition, //检索式
+        DBType: this.DBType, //”CN”或”WD”,表示检索中文库或世界库
+        PageNum: this.queryParams.current, //页码(最多 200 页)
+        RowCount: this.queryParams.size, //每页返回条数(最多 50 条)
+        OrderBy: this.queryParams.OrderBy, //排序字段:“AD”,“PD”,“GD”, “ID”(检索引擎自生成字段,排序顺序固定)
+        OrderByType: this.queryParams.OrderByType, //排序方式:“ASC”,“DESC” 即正序倒序
+        retrieveRecordId:this.queryParams.retrieveRecordId
+      };
+      // console.log(this.$s.getSession('retrieveRecordId'),)
+      queryParams.params = params;
+      queryParams.reportId = this.reportId
+      this.$store.commit("SET_PATENT_PARAMS", queryParams);
+      this.$store.commit("SET_PATENT_RECORDS", []);
+      this.loading = true;
+      await this.$api.patentSelectImport(params).then((response) => {
+          if (response.code == 200) {
+            this.total = response.data.total;
+            this.$set(this.queryParams,'startNumber',this.endNumber > 0 ? this.startNumber : 1)
+              this.$set(this.queryParams,'endNumber',this.endNumber > 0 ? this.endNumber : this.total)
+            let records = response.data.records;
+            this.tableData = records
+            params.retrieveRecordId = response.data.retrieveRecordId
+            this.queryParams.retrieveRecordId = response.data.retrieveRecordId
+            this.$store.commit("SET_PATENT_PARAMS", queryParams);
+            this.$s.setSession('queryParams',queryParams)
+            this.$store.commit("SET_PATENT_RECORDS", records);
+            this.loading = false;
+          }
+        })
+        .catch((error) => {
+          this.loading = false;
+        });
+        
+    },
+    handleSelect(data) {
+      // this.queryParams.selected = data
+    },
+    async handleChangeView(item) {
+      // console.log(item)
+      if(this.viewSelected==item.value){
+        return false
+      }
+      if(this.viewSelected!="patent-picture-list-view" && item.value!="patent-picture-list-view"){
+        this.queryParams.size = 10;
+        this.viewSelected = item.value;
+      }else if(this.viewSelected=="patent-picture-list-view" || item.value=="patent-picture-list-view"){
+        if (item.value === "patent-picture-list-view") {
+          this.$set(this.queryParams, "size", 20);
+        } else {
+          this.queryParams.size = 10;
+        }
+        this.viewSelected = item.value;
+        this.getList();
+      }
+return 
+
+      this.viewSelected = item.value;
+      if (this.viewSelected === "patent-picture-list-view") {
+        this.$set(this.queryParams, "size", 20);
+      } else {
+        this.queryParams.size = 10;
+      }
+      // await this.getPatentViewField();
+      this.getList();
+    },
+    async handleFieldManage() {
+      // await this.getPatentViewField()
+      this.$refs.patentViewField.open(
+        this.patentViewField,
+        this.queryParams.retrieveRecordId,
+        this.viewSelected
+      );
+    },
+    async getPatentViewField(refresh) {
+      var arr = ['标签','简单同族','Inpadoc同族','扩展同族','[标]权利人','[标]申请人','引用专利数量','被引用数量','权利要求数']
+      let params = {
+        project:this.queryParams.retrieveRecordId,
+        type: "list",
+        view: this.viewSelected,
+        refresh: refresh,
+      };
+      const { data } = await this.$api.getUserSettingField(params);
+      this.patentViewField = data.filter(item=>{ return arr.indexOf(item.name) == -1});
+    },
+    updatePatentViewField(data) {
+      this.patentViewField = data;
+    },
+    //快速选择
+    handleSelectNumber(type) {
+      switch (type) {
+        case 0: //本页选择
+          this.patentNoList = [...new Set(this.patentNoList.concat(this.$store.state.patent.records.map((item) => item.applicationNo))),];
+          this.queryParams.isAdd = [...new Set(this.queryParams.isAdd.concat(this.$store.state.patent.records.map((item) => item.applicationNo))),];
+          break;
+        case 1: //全部选择
+          this.startNumber = 1;
+          this.endNumber = this.total;
+          this.$set(this.queryParams,'startNumber',1)
+          this.$set(this.queryParams,'endNumber',this.total)
+        case 2: //范围选择
+          this.queryParams.isDelete = [];
+          this.queryParams.isAdd = [];
+          this.patentNoList = [];
+          this.quickSelect = true;
+          if (type == 2) {
+            if (!Number(this.queryParams.startNumber) ||!Number(this.queryParams.endNumber)) {
+              this.$set(this.queryParams,'startNumber',this.endNumber > 0 ? this.startNumber : 1)
+              this.$set(this.queryParams,'endNumber',this.endNumber > 0 ? this.endNumber : this.total)
+              break;
+            }
+            this.startNumber = this.queryParams.startNumber;
+            this.endNumber = this.queryParams.endNumber;
+          }
+          this.commonSwitch();
+          break;
+      }
+      this.getSelectedTotal()
+    },
+    //每页全部选择或范围选择的专利
+    commonSwitch() {
+      var arr = []
+      if (this.queryParams.size * this.queryParams.current >= this.startNumber) {
+        if (this.queryParams.size * this.queryParams.current >=this.endNumber) {
+          if (this.queryParams.size * (this.queryParams.current - 1) + 1 <=this.startNumber) {
+            var a =this.startNumber -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            var b =this.endNumber -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            for (var y = a; y <= b; y++) {
+              arr.push(this.tableData[y].applicationNo)
+            }
+          } else {
+            var a =this.queryParams.size * (this.queryParams.current - 1) +1 -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            var b = this.endNumber -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            for (var y = a; y <= b; y++) {
+              arr.push(this.tableData[y].applicationNo)
+            }
+          }
+        } else {
+          if (this.queryParams.size * (this.queryParams.current - 1) + 1 <=this.startNumber) {
+            var a =this.startNumber -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            var b =this.queryParams.size * this.queryParams.current -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            for (var y = a; y <= b; y++) {
+              arr.push(this.tableData[y].applicationNo)
+            }
+          } else {
+            var a =this.queryParams.size * (this.queryParams.current - 1) +1 -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            var b =this.queryParams.size * this.queryParams.current -(this.queryParams.size * (this.queryParams.current - 1) + 1);
+            for (var y = a; y <= b; y++) {
+              arr.push(this.tableData[y].applicationNo)
+            }
+          }
+        }
+      }
+      // this.patentNoList = JSON.parse(JSON.stringify(arr))
+      this.quickSelectArr = JSON.parse(JSON.stringify(arr))
+      this.getHaveChoose(arr)
+    },
+    //获取已选择的专利
+    getHaveChoose(arr){
+      var arr1 = [...new Set(arr.concat(this.queryParams.isAdd))]
+      this.patentNoList = arr1.filter((x) => this.queryParams.isDelete.indexOf(x)==-1)
+    },
+    //获取已选择的总条数
+    getSelectedTotal(){
+      this.selectedTotal = Number(this.endNumber) - Number(this.startNumber) + 1 + Number(this.queryParams.isAdd.length) - Number(this.queryParams.isDelete.length)
+    },
+    //获取手动选择的专利
+    getChoosePatentNo(patentNo){
+      if(this.quickSelect){
+        var index = this.queryParams.isDelete.findIndex(item=>{
+          return item == patentNo
+        })
+        if(index == -1){
+          var index2 = this.quickSelectArr.findIndex(item=>{
+            return item == patentNo
+          })
+          if(index2==-1){
+            this.setIsAdd(patentNo)
+          }else{
+            this.queryParams.isDelete.push(patentNo)
+          }
+        }else{
+          this.queryParams.isDelete.splice(index,1)
+        }
+      }else{
+        this.setIsAdd(patentNo)
+      }
+      this.getSelectedTotal()
+    },
+    //是否加入isAdd里面
+    setIsAdd(patentNo){
+      var index = this.queryParams.isAdd.findIndex(item=>{
+          return item == patentNo
+        })
+      if(index!=-1){
+        this.queryParams.isAdd.splice(index,1)
+      }else{
+        this.queryParams.isAdd.push(patentNo)
+      }
+    },
+    //取消选择
+    handleCancelSelectNumber() {
+        this.patentNoList = [];
+        this.queryParams.isAdd = []
+        this.queryParams.isDelete = []
+        this.startNumber = 1
+        this.queryParams.startNumber = 1
+        this.queryParams.endNumber = this.total
+        this.endNumber = 0
+        this.quickSelect = false
+        this.selectedTotal = 0
+      // this.getList()
+    },
+    //排序
+    handleSort(data) {
+      console.log(data);
+      const o = {
+        publicAccreditDate: "GD",
+        publicDate: "PD",
+        applicationDate: "AD",
+      };
+      this.queryParams.OrderBy = o[data.prop];
+      this.queryParams.OrderByType = data.order.toUpperCase();
+      this.getList();
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.total{
+  margin-right: 10px;
+    font-weight: 400;
+    color: #606266;
+    display: inline-block;
+    font-size: 13px;
+    min-width: 35.5px;
+    height: 28px;
+    line-height: 28px;
+    vertical-align: top;
+    box-sizing: border-box;
+}
+.foot-total{
+  display: flex;
+  align-items: center;
+}
+.patent-fast-edit-popover {
+  padding: 0 !important;
+  .btn {
+    color: #000;
+    line-height: 40px;
+    border-radius: 5px;
+    padding-left: 10px;
+    text-align: left;
+    font-size: 14px;
+    cursor: pointer;
+    &:hover {
+      background: #adadad;
+      color: #fff;
+    }
+  }
+  .disabled {
+    cursor: not-allowed !important;
+  }
+  .bottom {
+    text-align: right;
+    color: #1e9fff;
+    line-height: 40px;
+    padding-left: 10px;
+    font-size: 18px;
+  }
+  .el-divider--horizontal {
+    margin: 10px 0 !important;
+  }
+  .select-number {
+    .el-input {
+      width: 70px;
+    }
+    span {
+      padding: 0 3px;
+    }
+  }
+}
+</style>

+ 44 - 0
src/views/components/import/conditionImport/searchResultIndex.vue

@@ -0,0 +1,44 @@
+<template>
+  <div>
+    <search-Result :condition="condition"  :DBType="DBType" :reportId="reportId" :retrieveRecordId="retrieveRecordId" :asCompare="asCompare"></search-Result>
+  </div>
+</template>
+
+<script>
+import searchResult from './searchResult.vue';
+export default {
+  components: {
+    searchResult
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {
+    condition(){
+        return this.$route.query.condition
+    },
+    DBType(){
+        return this.$route.query.DBType
+    },
+    reportId(){
+        return this.$route.query.reportId
+    },
+    retrieveRecordId(){
+      return this.$route.query.retrieveRecordId
+    },
+    asCompare(){
+      return this.$route.query.asCompare
+    }
+  },
+  methods: {},
+  created() {},
+  mounted() {
+    
+  }
+};
+</script>
+<style lang="scss" scoped>
+</style>

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

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

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

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

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

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

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

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

+ 181 - 0
src/views/components/import/excelImport/importPatent.vue

@@ -0,0 +1,181 @@
+<template>
+    <div class="import-patent">
+    <el-container class="import-patent">
+      <el-aside class="import-patent-main" style="width:450px">
+        <el-container class="import-patent-action">
+          <el-main class="import-patent-action-main" v-loading="loading">
+            <el-form :model="form" > 
+              <el-form-item label="数据来源:">
+                <select style="width:300px;border:0;outline:none" name="" id="" v-model="sourceId">
+                  <option value="">请选择数据来源</option>
+                  <option v-for="item in customField.dataType" :value="item.id">{{item.name}}</option>
+                </select>
+                <el-divider ></el-divider>
+              </el-form-item>
+              <el-form-item label="选择需要上传的专利信息导入文件">
+                <el-upload class="upload-file" drag action="#" :auto-upload="false" :show-file-list="false" :on-change="onChange">
+                  <i :class="!form.file ? 'el-icon-upload' : 'el-icon-refresh'"></i>
+                  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+                  <div class="el-upload__tip" slot="tip"></div>
+                </el-upload>
+              </el-form-item>
+            </el-form>
+          </el-main>
+        </el-container>
+
+        
+      </el-aside>
+      <el-main>
+        <systemTask ref="systemTask" :form="1" :reportId="reportId" :productId="productId" :projectId="projectId"></systemTask>
+      </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+// import systemTask from './systemTask.vue'
+import systemTask from '@/views/task/index.vue'
+export default {
+  props:['reportId','asCompare','productId','projectId'],
+  components: {
+    systemTask
+  },
+  data() {
+    return {
+      form: {},
+      sourceId: '',
+      customField: [],
+      loading:false,
+    }
+  },
+  computed: {},
+  mounted() {
+    this.getCustomField()
+  },
+  methods: {
+    getCustomField() {
+      this.$api.getCustomField({ projectId: 0, patentTotal: false }).then(response => {
+        this.customField = response.data
+      })
+    },
+    getQueueList() {
+      this.$refs.systemTask.getQueueList()
+    },
+    onChange(file, fileList) {
+      this.form.file = file.raw
+      this.handleConfirm()
+    },
+    handleConfirm() {
+      const json = JSON.parse(JSON.stringify(this.form))
+      const refs = this.$refs
+     
+      let data = {
+        reportId: this.reportId,
+        productId: this.productId,
+        projectId: this.projectId,
+        sourceId:this.sourceId,
+        fieldList: [],
+        folderIds: refs.folderTree ? refs.folderTree.getCheckedKeys() : [],
+        asCompare:this.asCompare
+      }
+      for (let uid in json.field) {
+        const field = json.field[uid]
+        if (!field) {
+          continue;
+        }
+        const type = field.type
+        const value = field.value
+        if (value) {
+          if (type === 5) {
+            value.map(option => {
+              data.fieldList.push({
+                fieldId: parseInt(id),
+                type: type,
+                optionId: option
+              })
+            })
+          } else if (type === 6) {
+            const tree = refs[id]
+            if (tree) {
+              const treeNode = tree[0].getCheckedKeys()
+              treeNode.map(node => {
+                data.fieldList.push({
+                  fieldId: parseInt(id),
+                  type: type,
+                  optionId: node
+                })
+              })
+            }
+          } else {
+            data.fieldList.push({
+              fieldId: parseInt(id),
+              type: type,
+              optionId: [0, 1, 2].indexOf(type) === -1 ? value : 0,
+              text: value
+            })
+          }
+        }
+      }
+      if (!this.form.file) {
+        this.$message.error('请选择文件')
+        return false
+      }
+      if (!this.sourceId) {
+        this.$message.error('请选择数据类型')
+        return false
+      }
+      let formData = new FormData()
+      formData.append('file', this.form.file)
+      formData.append('json', JSON.stringify(data))
+      this.btnLoading = true
+      this.loading = true
+      // console.log(formData)
+      this.$api.importProjectPatent(formData).then(response => {
+        this.$message.success('任务创建成功')
+        this.form.file = null
+        this.btnLoading = false
+        this.loading = false
+        // this.handleClose()
+        this.getQueueList()
+      }).catch(error => {
+        this.btnLoading = false
+        this.loading = false
+      })
+    }
+  },
+}
+</script>
+
+<style lang="scss">
+.el-divider--horizontal{
+  margin:0
+}
+.import-patent {
+  height: 100%;
+  .import-patent-main {
+    overflow-x: hidden;
+    padding: 0;
+    height: 100%;
+    background: #fff;
+  }
+  .import-patent-action {
+    width: 450px;
+    height: 100%;
+    border-right: 1px solid #d2d2d2;
+    float: left;
+    .custom-field-form .el-form-item__label {
+      font-weight: bold !important;
+    }
+    .import-patent-action-form {
+      margin-left: 20px;
+    }
+    .import-patent-action-main {
+      padding: 10px;
+    }
+  }
+  .import-patent-button {
+    height: 70px !important;
+    text-align: right;
+  }
+}
+</style>

+ 41 - 0
src/views/components/import/excelImport/index.vue

@@ -0,0 +1,41 @@
+<template>
+  <div>
+    <importPatent :reportId="reportId" :asCompare="asCompare" :productId="productId" :projectId="projectId"></importPatent>
+  </div>
+</template>
+
+<script>
+import importPatent from './importPatent.vue'
+export default {
+  components: {
+    importPatent
+  },
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    reportId() {
+      return this.$route.query.reportId
+    },
+    projectId() {
+      return this.$route.query.projectId
+    },
+    productId() {
+      return this.$route.query.productId
+    },
+    asCompare() {
+      return this.$route.query.asCompare
+    }
+  },
+  mounted() {
+
+  },
+  methods: {},
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 344 - 0
src/views/components/import/index.vue

@@ -0,0 +1,344 @@
+<template>
+  <div class="import-patent">
+    <el-container class="import-patent">
+      <el-main class="import-patent-main">
+        <el-container class="import-patent-action">
+          <!-- <el-header>
+            <el-form :inline="true" class="import-patent-action-form">
+              <el-form-item>
+                <el-button size="small" type="primary" @click="handleManage" :disabled="!($permission('/workspace/common/customField') && $r(projectId,[1,2]))">自定义栏位管理</el-button>
+                <el-button size="small" type="success" @click="handleFolder" :disabled="!($permission('/workspace/common/folder_manage') && $r(projectId,[1,2]))">文件夹管理</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header> -->
+          <el-main class="import-patent-action-main" v-loading="loading">
+            <el-form :model="form">
+              <!-- <el-form-item label="选择需要关联的标引与分类">
+                <el-table :data="tableData" :show-header="false">
+                  <el-table-column type="expand">
+                    <template slot-scope="props">
+                      <el-form label-position="top" class="custom-field-form">
+                        
+                        <template v-if="props.row.field === 'folder'">
+                          <el-tree
+                              ref="folderTree"
+                              :data="customField.folder"
+                              check-strictly
+                              :default-checked-keys="form.json.field.folder"
+                              show-checkbox
+                              node-key="id"
+                              :props="defaultProps"
+                          ></el-tree>
+                        </template>
+                        <template v-else v-for="(item, index) in customField[props.row.field]">
+                          <el-form-item :label="`${index + 1}. ${item.name}`">
+                            <template v-if="item.type === 0 || item.type === 2">
+                              <el-input v-model="form.json.field[item.id].value" placeholder="请输入内容" size="small"></el-input>
+                            </template>
+                            <template v-if="item.type === 1">
+                              <el-date-picker v-model="form.json.field[item.id].value" value-format="yyyy-MM-dd" type="date" size="small" placeholder="选择日期" style="width: 100%;"></el-date-picker>
+                            </template>
+                            <template v-if="item.type === 3">
+                              <el-select v-model="form.json.field[item.id].value" size="small" placeholder="请选择" class="width_100">
+                                <el-option v-for="option in item.option" :value="option.id" :label="option.name"></el-option>
+                              </el-select>
+                            </template>
+                            <template v-if="item.type === 4">
+                              <el-radio-group v-model="form.json.field[item.id].value">
+                                <el-radio v-for="option in item.option" :label="option.id">{{ option.name }}</el-radio>
+                              </el-radio-group>
+                            </template>
+                            <template v-if="item.type === 5">
+                              <el-checkbox-group v-model="form.json.field[item.id].value">
+                                <el-checkbox v-for="option in item.option" :label="option.id">{{ option.name }}</el-checkbox>
+                              </el-checkbox-group>
+                            </template>
+                            <template v-if="item.type === 6">
+                              <el-tree
+                                  :ref="item.id"
+                                  :data="item.option"
+                                  check-strictly
+                                  :default-checked-keys="form.json.field[item.id].value"
+                                  show-checkbox
+                                  node-key="id"
+                                  :props="defaultProps"
+                              ></el-tree>
+                            </template>
+                          </el-form-item>
+                        </template>
+                      </el-form>
+                    </template>
+                  </el-table-column>
+                  <el-table-column prop="name" show-overflow-tooltip></el-table-column>
+                </el-table>
+              
+              </el-form-item>
+              <el-form-item label="数据来源:">
+                <select style="width:390px;border:0;outline:none" name="" id="" v-model="sourceId">
+                  <option value="">请选择数据来源</option>
+                  <option v-for="item in customField.dataType" :value="item.id">{{item.name}}</option>
+                </select>
+                <el-divider ></el-divider>
+              </el-form-item>  -->
+              
+              <el-form-item label="选择需要上传的专利信息导入文件">
+                <el-upload class="upload-file" drag action="#" :auto-upload="false" :show-file-list="false" :on-change="onChange">
+                  <i :class="!form.file ? 'el-icon-upload' : 'el-icon-refresh'"></i>
+                  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+                  <div class="el-upload__tip" slot="tip"></div>
+                </el-upload>
+              </el-form-item>
+            </el-form>
+          </el-main>
+        </el-container>
+
+        <system-task ref="systemTask" :form="1" :reportId="reportId" />
+      </el-main>
+<!--      <el-footer class="import-folder-button">-->
+<!--        <el-button @click="handleClose">关 闭</el-button>-->
+<!--        <el-button type="primary" @click="handleConfirm" :loading="btnLoading">确 定</el-button>-->
+<!--      </el-footer>-->
+    </el-container>
+
+    <!-- <project-field-drawer @close="handleClose2" ref="projectFieldDrawer" />
+
+    <project-folder-dialog @close="updateFolder" ref="projectFolderDialog" /> -->
+  </div>
+</template>
+
+<script>
+// import ProjectFieldDrawer from "../../layout/components/field.vue";
+// import ProjectFolderDialog from "../common/Folder.vue";
+import SystemTask from '../task/index1.vue'
+import { mapGetters } from "vuex";
+
+export default {
+  components: {
+    // ProjectFieldDrawer,
+    // ProjectFolderDialog,
+    SystemTask
+  },
+  data() {
+    return {
+      sourceId: '',
+      reportId: this.$route.query.id,
+      asCompare:this.$route.query.asCompare,
+      title: '',
+      customField: {},
+      loading: false,
+      btnLoading: false,
+      total: 0,
+      tableData2: [],
+      form: {
+        file: null,
+        json: {
+          projectId: 0,
+          field: [],
+          folder: {}
+        }
+      },
+      fieldTypeObj: {
+        0: '数字',
+        1: '日期',
+        2: '文本',
+        3: '下拉框',
+        4: '单选',
+        5: '多选',
+        6: '树',
+      },
+      tableData: [
+        {
+          name: '标引',
+          field: 'index'
+        }, {
+          name: '分类',
+          field: 'classify'
+        }, {
+          name: '文件夹',
+          field: 'folder'
+        }],
+      defaultProps: {
+        children: 'children',
+        label: 'name'
+      },
+    }
+  },
+  computed: {
+    ...mapGetters(['webSocket', 'userinfo'])
+  },
+  mounted() {
+
+    this.reportId = this.$route.query.id
+    this.asCompare = this.$route.query.asCompare
+    // this.getCustomField()
+  },
+  // watch:{
+  //   sourceId(val){
+  //     console.log(val)
+  //   }
+  // },
+  methods: {
+
+    getQueueList() {
+      this.$refs.systemTask.getQueueList()
+    },
+    cancel() {
+      this.dialogVisible = false
+    },
+    updateFolder() {
+      this.$api.getProjectFolderList({ projectId: this.projectId, patentTotal: false }).then(response => {
+        this.customField.folder = response.data
+      })
+    },
+    handleManage() {
+      this.$refs.projectFieldDrawer.open(this.projectId)
+    },
+    handleFolder() {
+      this.$refs.projectFolderDialog.open(this.projectId)
+    },
+    onChange(file, fileList) {
+      this.form.file = file.raw
+      this.handleConfirm()
+    },
+    handleClose() {
+
+    },
+    handleClose2() {
+      this.getCustomField()
+    },
+    getCustomField() {
+      this.$api.getCustomField({ projectId: this.projectId }).then(response => {
+        this.customField = response.data;
+        ['index', 'classify'].map(key => {
+          this.customField[key].map(item => {
+            let value = null
+            if (item.type === 5 || item.type === 6) {
+              value = []
+            }
+            this.$set(this.form.json.field, item.id, { type: item.type, value })
+          })
+        })
+        // console.log(this.customField);
+      })
+    },
+    handleConfirm() {
+      // const json = JSON.parse(JSON.stringify(this.form.json))
+      // const refs = this.$refs
+
+      // let data = {
+      //   projectId: this.projectId,
+      //   sourceId: this.sourceId,
+      //   fieldList: [],
+      //   folderIds: refs.folderTree ? refs.folderTree.getCheckedKeys() : []
+      // }
+      // for (let id in json.field) {
+      //   const field = json.field[id]
+      //   if (!field) {
+      //     continue;
+      //   }
+      //   const type = field.type
+      //   const value = field.value
+      //   if (value) {
+      //     if (type === 5) {
+      //       value.map(option => {
+      //         data.fieldList.push({
+      //           fieldId: parseInt(id),
+      //           type: type,
+      //           optionId: option
+      //         })
+      //       })
+      //     } else if (type === 6) {
+      //       const tree = refs[id]
+      //       if (tree) {
+      //         const treeNode = tree[0].getCheckedKeys()
+      //         treeNode.map(node => {
+      //           data.fieldList.push({
+      //             fieldId: parseInt(id),
+      //             type: type,
+      //             optionId: node
+      //           })
+      //         })
+      //       }
+      //     } else {
+      //       data.fieldList.push({
+      //         fieldId: parseInt(id),
+      //         type: type,
+      //         optionId: [0, 1, 2].indexOf(type) === -1 ? value : 0,
+      //         text: value
+      //       })
+      //     }
+      //   }
+      // }
+      if (!this.form.file) {
+        this.$message.error('请选择文件')
+        return false
+      }
+      // if (!this.sourceId) {
+      //   this.$message.error('请选择数据类型')
+      //   return false
+      // }
+      let formData = new FormData()
+      formData.append('reportId', this.reportId)
+      if(this.asCompare){
+        formData.append('asCompare',this.asCompare)
+      }
+      
+      formData.append('file', this.form.file)
+      // formData.append('json', JSON.stringify(data))
+      this.btnLoading = true
+      this.loading = true
+      // console.log(formData)
+      this.$api.import(formData).then(response => {
+        this.$message.success('任务创建成功')
+        this.form.file = null
+        this.btnLoading = false
+        this.loading = false
+        // this.handleClose()
+        this.getQueueList()
+      }).catch(error => {
+        this.btnLoading = false
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+<style lang="scss">
+.el-divider--horizontal {
+  margin: 0
+}
+
+.import-patent {
+  height: 100%;
+
+  .import-patent-main {
+    padding: 0;
+    height: 100%;
+    background: #fff;
+  }
+
+  .import-patent-action {
+    width: 500px;
+    height: 100%;
+    border-right: 1px solid #d2d2d2;
+    float: left;
+
+    .custom-field-form .el-form-item__label {
+      font-weight: bold !important;
+    }
+
+    .import-patent-action-form {
+      margin-left: 20px;
+    }
+
+    .import-patent-action-main {
+      padding: 10px;
+    }
+  }
+
+  .import-patent-button {
+    height: 70px !important;
+    text-align: right;
+  }
+}
+</style>

+ 55 - 0
src/views/event/components/details/drawer/index.vue

@@ -0,0 +1,55 @@
+<template>
+   <el-drawer class="custom-drawer-form" size="1000px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
+        <div style="padding:10px;height:100%">
+            <component :is='component' :isOperate='2' :eventId="params.eventId" :eventName="params.eventName" @submit="submit"></component>
+        </div>
+    </el-drawer>
+</template>
+
+<script>
+  import Project from '@/views/project/index.vue'
+  import Report from '@/views/report/components/index.vue'
+  import patentMining from '@/views/patentMining/components/viewIndex.vue'
+export default {
+  components: {
+    Project,
+    Report,
+    patentMining
+  },
+  props: {},
+  data() {
+    return {
+        drawer:false,
+        component:'',
+        params:{},
+        components:{
+            1:'Project',
+            2:'Report',
+            3:'patentMining'
+        },
+        isEdit:false
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    open(data){
+        this.params = data
+        this.component = this.components[data.type]
+        this.isEdit = false
+        this.drawer = true
+    },
+    close(){
+        this.$emit('isEdit',this.isEdit)
+        this.drawer = false
+    },
+    submit(val){
+        this.isEdit = val
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

src/views/home/components/mixins.js → src/views/event/components/details/mixins.js


src/views/home/components/showDialog.js → src/views/event/components/details/showDialog.js


src/views/home/components/visual.vue → src/views/event/components/details/visual.vue


+ 1 - 1
src/views/home/components/visualDialog.vue

@@ -11,7 +11,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import visual from '@/views/home/components/visual.vue'
+import visual from '@/views/event/components/details/visual.vue'
 export default {
 export default {
   name:'showDialog',
   name:'showDialog',
   components: {
   components: {

+ 127 - 0
src/views/event/components/details/visualRouter.vue

@@ -0,0 +1,127 @@
+<template>
+  <div class="height_100">
+    <el-container>
+        <el-aside width="350px">
+            <el-form ref="form" :model="form" label-width="140px" size="mini" style="margin-top:20px">
+                <el-form-item label="事件名称:">
+                    <myTooltip :content="form.name">
+                        <div v-html="$commonJS.getColumnData(form, {type:'String',value:'name'})" class="noWrap"></div>
+                    </myTooltip>
+                </el-form-item>
+                <el-form-item label="报告数量:"> 
+                  <el-link type="primary" @click="checkList('2')">
+                    <span v-html="$commonJS.getColumnData(form, {type:'String',value:'reportProjectNum'})"></span>
+                  </el-link>
+                </el-form-item>
+                <el-form-item label="专利数据库数量:">
+                  <el-link type="primary" @click="checkList('1')">
+                    <span v-html="$commonJS.getColumnData(form, {type:'String',value:'patentProjectNum'})" ></span>
+                  </el-link>
+                </el-form-item>
+                <el-form-item label="应用场景:">
+                  <myTooltip :content="$commonJS.getColumnData(form, {type:'Array',value:'scenarioNames'})">
+                    <div class="noWrap" v-html="$commonJS.getColumnData(form, {type:'Array',value:'scenarioNames'})"></div>
+                  </myTooltip>
+                </el-form-item>
+                <el-form-item label="发生时间:">
+                  <myTooltip :content="form.eventDate" >
+                    <div v-html="$commonJS.getColumnData(form, {type:'String',value:'eventDate'})" class="noWrap"></div>
+                  </myTooltip>
+                </el-form-item>
+                <el-form-item label="描述:">
+                  <myTooltip :content="form.description" >
+                    <div v-html="$commonJS.getColumnData(form, {type:'String',value:'description'})" class="noWrap"></div>
+                  </myTooltip>
+                </el-form-item>
+                <el-form-item label="创建人:">
+                  <myTooltip :content="form.createName" >
+                    <div v-html="$commonJS.getColumnData(form, {type:'String',value:'createName'})" class="noWrap"></div>
+                  </myTooltip>
+                </el-form-item>
+                <el-form-item label="创建时间:">
+                  <myTooltip :content="form.createTime" >
+                    <div v-html="$commonJS.getColumnData(form, {type:'String',value:'createTime'})" class="noWrap"></div>
+                  </myTooltip>
+                </el-form-item>
+            </el-form>
+        </el-aside>
+        <el-main >
+            <visual :visuals="visuals" v-if="show"></visual>
+        </el-main>
+    </el-container>
+    <project-Drawer ref="projectDrawer" @isEdit="isEdit"></project-Drawer>
+  </div>
+</template>
+
+<script>
+import visual from './visual.vue'
+import projectDrawer from './drawer/index.vue'
+export default {
+  components: {
+    visual,
+    projectDrawer
+  },
+  props: {},
+  data() {
+    return {
+        form:{},
+        show:true
+    };
+  },
+  watch: {},
+  computed: {
+    visuals(){
+        return JSON.parse(this.$route.query.visuals)
+    },
+  },
+  created() {},
+  mounted() {
+    this.getQuestionDetails()
+  },
+  methods: {
+    checkList(type){
+      var data = {
+        type:type,
+        eventName:this.form.name,
+        eventId:this.eventId
+      }
+      this.$refs.projectDrawer.open(data)
+    },
+    isEdit(val){
+      if(val){
+        this.getQuestionDetails()
+      }
+    },
+    getQuestionDetails(){
+        let params = {
+            current:1,
+            size:10,//分页信息
+            searchQuery:`id=${this.visuals.eventId}`,//检索条件
+            orderDTOList: [
+                {
+                    "orderBy": "createTime",
+                    "orderType": 1
+                }
+            ],//排序
+        }
+        this.$api.queryEvent(params).then(res => {
+            if (res.code == 200) {
+                this.form = res.data.data[0]
+                this.show = false
+                this.$nextTick(()=>{
+                    this.show = true
+                })
+            }
+        }).catch(err => {
+            this.form = {}
+            this.show = false
+            this.$nextTick(()=>{
+                this.show = true
+            })
+        })
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

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

@@ -186,6 +186,7 @@ export default {
     },
     },
     //清空信息
     //清空信息
     clearMessage(){
     clearMessage(){
+      this.$emit('submit',true)
       this.$nextTick(()=>{
       this.$nextTick(()=>{
         this.handleMessage = ''
         this.handleMessage = ''
       })
       })

+ 1 - 1
src/views/event/components/mixins/index.js

@@ -1,4 +1,4 @@
-import { openVisual } from "@/views/home/components/mixins";
+import { openVisual } from "@/views/event/components/details/mixins";
 export default {
 export default {
   mixins: [openVisual],
   mixins: [openVisual],
   props: {
   props: {

+ 0 - 103
src/views/home/components/visualRouter.vue

@@ -1,103 +0,0 @@
-<template>
-  <div class="height_100">
-    <el-container>
-        <el-aside width="300px">
-            <el-form ref="form" :model="form" label-width="130px" size="mini">
-                <el-form-item label="事件名称:">
-                    <myTooltip :content="form.name" >
-                        <div v-html="$commonJS.getColumnData(form, {type:'String',value:'name'})" class="noWrap"></div>
-                    </myTooltip>
-                </el-form-item>
-                <el-form-item label="报告数量:"> {{ form.reportProjectNum || 0  }} </el-form-item>
-              <el-form-item label="专利数据库数量:">{{ form.patentProjectNum || 0 }}</el-form-item>
-              <el-form-item label="应用场景:">
-                <myTooltip :content="$commonJS.getColumnData(form, {type:'Array',value:'scenarioNames'})">
-                  <div class="noWrap" v-html="$commonJS.getColumnData(form, {type:'Array',value:'scenarioNames'})"></div>
-                </myTooltip>
-              </el-form-item>
-              <el-form-item label="发生时间:">
-                <myTooltip :content="form.eventDate" >
-                  <div v-html="$commonJS.getColumnData(form, {type:'String',value:'eventDate'})" class="noWrap"></div>
-                </myTooltip>
-              </el-form-item>
-              <el-form-item label="描述:">
-                <myTooltip :content="form.description" >
-                  <div v-html="$commonJS.getColumnData(form, {type:'String',value:'description'})" class="noWrap"></div>
-                </myTooltip>
-              </el-form-item>
-              <el-form-item label="创建人:">
-                <myTooltip :content="form.createName" >
-                  <div v-html="$commonJS.getColumnData(form, {type:'String',value:'createName'})" class="noWrap"></div>
-                </myTooltip>
-              </el-form-item>
-              <el-form-item label="创建时间:">
-                <myTooltip :content="form.createTime" >
-                  <div v-html="$commonJS.getColumnData(form, {type:'String',value:'createTime'})" class="noWrap"></div>
-                </myTooltip>
-              </el-form-item>
-            </el-form>
-        </el-aside>
-        <el-main >
-            <visual :visuals="visuals" v-if="show"></visual>
-        </el-main>
-    </el-container>
-  </div>
-</template>
-
-<script>
-import visual from '@/views/home/components/visual.vue'
-export default {
-  components: {
-    visual
-  },
-  props: {},
-  data() {
-    return {
-        form:{},
-        show:true
-    };
-  },
-  watch: {},
-  computed: {
-    visuals(){
-        return JSON.parse(this.$route.query.visuals)
-    },
-  },
-  created() {},
-  mounted() {
-    this.getQuestionDetails()
-  },
-  methods: {
-    getQuestionDetails(){
-        let params = {
-            current:1,
-            size:10,//分页信息
-            searchQuery:`id=${this.visuals.eventId}`,//检索条件
-            orderDTOList: [
-                {
-                    "orderBy": "createTime",
-                    "orderType": 1
-                }
-            ],//排序
-        }
-        this.$api.queryEvent(params).then(res => {
-            if (res.code == 200) {
-                this.form = res.data.data[0]
-                this.show = false
-                this.$nextTick(()=>{
-                    this.show = true
-                })
-            }
-        }).catch(err => {
-            this.form = {}
-            this.show = false
-            this.$nextTick(()=>{
-                this.show = true
-            })
-        })
-    }
-  },
-};
-</script>
-<style lang="scss" scoped>
-</style>

+ 1 - 1
src/views/patentMining/components/mixins/index.js

@@ -1,4 +1,4 @@
-import { checkVisual } from "@/views/home/components/mixins";
+import { checkVisual } from "@/views/event/components/details/mixins";
 export default {
 export default {
   mixins: [checkVisual],
   mixins: [checkVisual],
   props: {
   props: {

+ 1 - 1
src/views/patentMining/components/view/commonTable.vue

@@ -14,7 +14,7 @@
         :label="item.name" align="center" sortable="custom">
         :label="item.name" align="center" sortable="custom">
         <template slot-scope="scope">
         <template slot-scope="scope">
           <div v-if="['name'].includes(item.value)">
           <div v-if="['name'].includes(item.value)">
-            <el-link @click="handleItem(scope.row, item.value)" >
+            <el-link type="primary" @click="handleItem(scope.row, item.value)" >
               <span v-html="$commonJS.getColumnData(scope.row, item)"></span>
               <span v-html="$commonJS.getColumnData(scope.row, item)"></span>
             </el-link>
             </el-link>
           </div>
           </div>

+ 1 - 0
src/views/patentMining/components/viewIndex.vue

@@ -222,6 +222,7 @@ export default {
       this.clearMessage()
       this.clearMessage()
     },
     },
     clearMessage() {
     clearMessage() {
+      this.$emit('submit',true)
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.handleMessage = ''
         this.handleMessage = ''
       })
       })

+ 1 - 1
src/views/project/components/view/table.vue

@@ -12,7 +12,7 @@
         <el-table-column v-for="item in column.filter(item=>!item.ifHidden)" :render-header=" $commonJS.renderHeaderMethods" :key="item.value" :prop="item.value" :label="item.name" sortable="custom" align="center">
         <el-table-column v-for="item in column.filter(item=>!item.ifHidden)" :render-header=" $commonJS.renderHeaderMethods" :key="item.value" :prop="item.value" :label="item.name" sortable="custom" align="center">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div v-if="['name'].includes(item.value)">
             <div v-if="['name'].includes(item.value)">
-              <el-link @click="handleClick(scope.row, item.value)">
+              <el-link type="primary" @click="handleClick(scope.row, item.value)">
                 <span  v-html="$commonJS.getColumnData(scope.row, item)"></span>
                 <span  v-html="$commonJS.getColumnData(scope.row, item)"></span>
               </el-link>
               </el-link>
             </div>
             </div>

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

@@ -372,6 +372,7 @@ export default {
       this.clearMessage()
       this.clearMessage()
     },
     },
     clearMessage() {
     clearMessage() {
+      this.$emit('submit',true)
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.handleMessage = ''
         this.handleMessage = ''
       })
       })

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

@@ -99,7 +99,7 @@
               ></component>
               ></component>
             </div>
             </div>
         </el-main>
         </el-main>
-        <el-footer>
+        <el-footer class="pagination">
             <el-pagination
             <el-pagination
                 background
                 background
                 layout="total, sizes, prev, pager, next, jumper"
                 layout="total, sizes, prev, pager, next, jumper"

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

@@ -632,6 +632,7 @@ export default {
     },
     },
     //清空信息
     //清空信息
     clearMessage() {
     clearMessage() {
+      this.$emit('submit',true)
       this.$nextTick(() => {
       this.$nextTick(() => {
         this.handleMessage = ''
         this.handleMessage = ''
       })
       })

+ 1 - 1
src/views/report/components/mixins/index.js

@@ -1,4 +1,4 @@
-import { checkVisual } from "@/views/home/components/mixins";
+import { checkVisual } from "@/views/event/components/details/mixins";
 export default {
 export default {
   mixins: [checkVisual],
   mixins: [checkVisual],
   props: {
   props: {

+ 1 - 1
src/views/report/components/view/table.vue

@@ -14,7 +14,7 @@
         <el-table-column v-for="item in column.filter(item=>!item.ifHidden)" :key="item.value" :prop="item.value" :render-header=" $commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
         <el-table-column v-for="item in column.filter(item=>!item.ifHidden)" :key="item.value" :prop="item.value" :render-header=" $commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
           <template slot-scope="scope">
           <template slot-scope="scope">
             <div v-if="['name'].includes(item.value)">
             <div v-if="['name'].includes(item.value)">
-              <el-link @click="handleItem(scope.row,item.value)">
+              <el-link type="primary" @click="handleItem(scope.row,item.value)">
                 <span  v-html="$commonJS.getColumnData(scope.row,item)"></span>
                 <span  v-html="$commonJS.getColumnData(scope.row,item)"></span>
               </el-link>
               </el-link>
             </div>
             </div>

+ 9 - 2
src/views/visual/components/drawer/eventDrawer.vue

@@ -2,7 +2,7 @@
     <div>
     <div>
       <el-drawer class="custom-drawer-form" size="1000px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
       <el-drawer class="custom-drawer-form" size="1000px" :with-header="false" :visible.sync="drawer" direction="rtl" :before-close="close" destroy-on-close append-to-body>
           <div style="padding:10px;height:100%">
           <div style="padding:10px;height:100%">
-            <questionIndex :scenarioId="params.scenarioId" :isOperate='2'></questionIndex>
+            <questionIndex :scenarioId="params.scenarioId" :isOperate='2' @submit="submit"></questionIndex>
           </div>
           </div>
       </el-drawer>
       </el-drawer>
     </div>
     </div>
@@ -21,6 +21,7 @@
           drawer:false,
           drawer:false,
           //应用场景的信息
           //应用场景的信息
           params:{},
           params:{},
+          isEdit:false
       };
       };
     },
     },
     watch: {},
     watch: {},
@@ -35,12 +36,18 @@
               scenarioName:scenarioName, 
               scenarioName:scenarioName, 
               scenarioId:scenarioId, 
               scenarioId:scenarioId, 
           }
           }
+          this.isEdit = false
           this.drawer = true
           this.drawer = true
         },
         },
         //关闭抽屉
         //关闭抽屉
         close(){
         close(){
+          if(this.isEdit){
             this.$emit('close')
             this.$emit('close')
-            this.drawer = false
+          }
+          this.drawer = false
+        },
+        submit(val){
+          this.isEdit = val
         }
         }
     },
     },
   };
   };

+ 10 - 3
src/views/visual/components/drawer/titleDrawer.vue

@@ -5,7 +5,7 @@
               <el-tabs v-model="components">
               <el-tabs v-model="components">
                   <el-tab-pane v-for="item in menu" :key="item.components"  :label="item.name" :name="item.components"></el-tab-pane>
                   <el-tab-pane v-for="item in menu" :key="item.components"  :label="item.name" :name="item.components"></el-tab-pane>
               </el-tabs>
               </el-tabs>
-              <component :is='components' style="height:calc(100% - 50px);" :isOperate='2' :scenarioId="[params.scenarioId]" :matterId="[params.matterId]" :eventId="params.eventId" :eventName="params.eventName"></component>
+              <component :is='components' style="height:calc(100% - 50px);" :isOperate='2' :scenarioId="[params.scenarioId]" :matterId="[params.matterId]" :eventId="params.eventId" :eventName="params.eventName" @submit="submit"></component>
           </div>
           </div>
           
           
       </el-drawer>
       </el-drawer>
@@ -38,7 +38,8 @@
           ],
           ],
           drawer:false,
           drawer:false,
           components:'Project',
           components:'Project',
-          params:{}
+          params:{},
+          isEdit:false
       };
       };
     },
     },
     watch: {},
     watch: {},
@@ -56,10 +57,13 @@
               },
               },
             )
             )
           }
           }
+          this.isEdit = false
           this.drawer = true
           this.drawer = true
       },
       },
       close(){
       close(){
-          this.$emit('close')
+          if(this.isEdit){
+            this.$emit('close')
+          }
           this.drawer = false
           this.drawer = false
           this.components='Project',
           this.components='Project',
           this.menu=[
           this.menu=[
@@ -73,6 +77,9 @@
               },
               },
              
              
           ]
           ]
+      },
+      submit(val){
+        this.isEdit = val
       }
       }
     },
     },
   };
   };