瀏覽代碼

选择专利、批量标引、同族专利

zhuhao 1 年之前
父節點
當前提交
cab64b8ff5

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

@@ -216,6 +216,22 @@ export default {
   esCountAnalysis(data) {
     return axios.post("/xiaoshi/patent/esCountAnalysis", data);
   },
+  /**
+  * 专利数据库批量标引
+  * @param {*} data 
+  * @returns 
+  */
+  batchAddCustomField(data) {
+    return axios.post("/xiaoshi/customField/batchAddCustomField", data);
+  },
+  /**
+  * 专利详情同族专利查询
+  * @param {*} data 
+  * @returns 
+  */
+  selectKinByPatentNo(data) {
+    return axios.post("/xiaoshi/patent/selectKinByPatentNo", data);
+  },
 
 
 };

+ 195 - 0
src/views/project/patentCollection/components/dialog/PatentBatchIndex.vue

@@ -0,0 +1,195 @@
+<template>
+  <div>
+    <el-dialog title="批量标引" :visible.sync="visible" width="500px" append-to-body destroy-on-close :before-close="close">
+      <el-container class="patent-batch-index">
+        <el-main class="patent-batch-index-main">
+          <el-form>
+            <el-form-item v-for="(item, index) in field" :key="index">
+              <div slot="label">
+                <span>{{ index + 1 }}. {{ item.name }}</span>
+              </div>
+              <el-switch class="patent-batch-index-field-enabled" v-model="item.enabled"
+                @change="change(item)"></el-switch>
+              <div v-if="item.enabled" class="patent-batch-index-field-content">
+                <template v-if="item.type === 0 || item.type === 2">
+                  <el-input type="textarea" v-model="item.text" placeholder="请输入内容" size="small"></el-input>
+                </template>
+                <template v-if="item.type === 1">
+                  <el-date-picker v-model="item.text" value-format="yyyy-MM-dd" type="date" size="small"
+                    placeholder="选择日期" class="width_100"></el-date-picker>
+                </template>
+                <template v-if="item.type === 4">
+                  <el-radio-group v-model="item.selected">
+                    <div v-for="option in item.option">
+                      <el-radio :label="option.id">{{ option.name }}</el-radio>
+                    </div>
+                  </el-radio-group>
+                </template>
+                <template v-if="item.type === 5">
+                  <el-checkbox-group v-model="item.selected">
+                    <div v-for="option in item.option">
+                      <el-checkbox :label="option.id">{{ option.name }}</el-checkbox>
+                    </div>
+                  </el-checkbox-group>
+                </template>
+                <template v-if="item.type === 6">
+                  <el-tree @check-change="onChangeTree($event, item)" :ref="item.id" :data="item.option" node-key="id"
+                    check-strictly default-expand-all :props="{ children: 'child', label: 'name' }">
+                    <span class="custom-tree-node" slot-scope="{ node, data }">
+                      <el-checkbox-group v-model="item.selected">
+                        <el-checkbox :label="data.id">{{ data.name }}</el-checkbox>
+                      </el-checkbox-group>
+                    </span>
+                  </el-tree>
+                </template>
+                <template v-if="item.isCategory == 1">
+                  <el-tree @check-change="onChangeTree($event, item)" :ref="item.id" :data="item.option" node-key="id"
+                    check-strictly default-expand-all :props="{ children: 'child', label: 'name' }">
+                    <span class="custom-tree-node" slot-scope="{ node, data }">
+                      <el-checkbox-group v-model="item.selected">
+                        <el-checkbox :label="data.id">{{ data.name }}</el-checkbox>
+                      </el-checkbox-group>
+                    </span>
+                  </el-tree>
+                </template>
+              </div>
+            </el-form-item>
+          </el-form>
+        </el-main>
+      </el-container>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="close">取 消</el-button>
+        <el-button type="primary" @click="submit">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ['projectId'],
+  data() {
+    return {
+      // 控制弹窗的显示
+      visible: false,
+      // 自定义及架构数据源
+      field: [],
+    }
+  },
+  mounted() {
+  },
+  methods: {
+    // 自定义字段树
+    onChangeTree(event, val) {
+      console.log(event, val);
+    },
+    // 开关,是否打开请求自定义字段以及架构的值
+    change(val) {
+      if (val.enabled) {
+        if (val.isCategory == 1) {
+          this.queryProductCategory(val)
+        } else {
+          this.queryCustomOption(val)
+        }
+      }
+    },
+    // 获取自定义字段
+    async getList() {
+      var params = {
+        current: 1,
+        size: 999,
+        searchQuery: `projectId=${this.projectId}`,
+        orderDTOList: [
+          {
+            "orderBy": "createTime",
+            "orderType": 1
+          }
+        ],
+      }
+      await this.$api.queryCustomField(params).then(response => {
+        this.field = response.data.data
+      }).catch(error => {
+      })
+    },
+    // 查询自定义栏位选项数据
+    async queryCustomOption(row) {
+      let params = {
+        customFieldId: row.id,
+      }
+      await this.$api.queryCustomOption(params).then(response => {
+        if (response.code == 200) {
+          this.$set(row, 'option', response.data.data)
+          this.$set(row, 'selected', [])
+        }
+      }).catch(error => {
+        this.$set(row, 'option', [])
+        this.$set(row, 'selected', [])
+      })
+    },
+    //获取产品或产品类别架构以及技术分类
+    queryProductCategory(item) {
+      let params = {
+        projectId: this.projectId,
+        taskId: this.taskId || null,
+        type: item.treeType,//类型:1产品类别,2产品,3技术分类,4自定义树
+        typeId: item.fieldId,//产品或类别id
+      }
+      this.$api.queryTreeNodeTree(params).then(res => {
+        if (res.code == 200) {
+          this.$set(item, 'option', response.data.data)
+          this.$set(item, 'selected', [])
+        }
+      }).catch(err => {
+        this.$set(row, 'option', [])
+        this.$set(row, 'selected', [])
+      })
+    },
+    //获取专利信息,拿到产品或产品类别
+    getPatent() {
+      let params = {
+        current: 1,//分页信息及区分同族类型
+        size: 10,//分页信息及区分同族类型
+        projectId: this.projectId,
+        searchQuery: this.searchStr || '',//检索条件
+        customFields: this.customFields || [],
+        orderDTOList: [],//排序信息
+      }
+      this.$api.QueryPatent(params).then(res => {
+        if (res.code == 200) {
+          // treeType 3产品类别 2产品???
+          if (res.data.data[0].trees.length > 0) {
+            res.data.data[0].trees.forEach(item => {
+              item.isCategory = 1
+              this.field.push(item)
+            })
+          }
+        }
+      }).catch(error => {
+      })
+    },
+    // 打开弹窗
+    async open() {
+      await this.getList()
+      this.getPatent()
+      this.visible = true
+    },
+    // 弹窗确定
+    submit() { 
+      let params = {
+        projectId:this.projectId,
+      }
+      this.$api.batchAddCustomField(params).then(res => {
+        if (res.code == 200) {
+          this.close()
+        }
+      })
+    },
+    // 弹窗关闭
+    close() {
+      this.visible = false
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 35 - 1
src/views/project/patentCollection/components/mixins/index.js

@@ -67,6 +67,7 @@ export const projectData = {
       } else {
         this.patentNoList.splice(index1, 1)
       }
+      this.$emit('addSelect',patent.patentNo)
     }
   },
 }
@@ -153,10 +154,43 @@ export const handleData = {
       // console.log(text,key);
       return this.getViewDom(text,key)
     },
-    getViewDom(text, field) {
+    getViewDom(text, field,) {
       if(!text){
         return ""
       }
+      var obj = null
+      switch (field) {
+        case '权利要求原文':
+          obj = text.find(item => {
+            return item.if_origin
+          })
+          text = obj? obj.text_content : ''
+          break;
+        case '权利要求译文':
+          obj = text.find(item => {
+            return item.if_origin == false
+          })
+          text = obj? obj.text_content : ''
+          break;
+        case '说明书文本原文':
+          obj = text.find(item => {
+            return item.if_origin
+          })
+          var data=obj.text_content.split('\r\n').join('<br/>')
+          text = data ? data : ''
+          break;
+        case '说明书文本译文':
+          obj = text.find(item => {
+            return item.if_origin == false
+          })
+          var data=obj.text_content.split('\r\n').join('<br/>')
+          text = data ? data : ''
+          break;
+      
+        default:
+          break;
+      }
+
       // if (this.contrastList.length > 0) {
       //   for (let i = 0; i < this.contrastList.length; i++) {
       //     if (this.contrastList[i].patentNo == this.patent.patentNo) {

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

@@ -85,9 +85,6 @@ export default {
     return {
     }
   },
-  watch: {
-
-  },
   activated() {
   },
   computed: {

+ 205 - 79
src/views/project/patentCollection/index.vue

@@ -61,11 +61,10 @@
                     <el-dropdown-item @click.native="handleExport(true)">当前所选</el-dropdown-item>
                   </el-dropdown-menu>
                 </el-dropdown>
-                </el-dropdown-item>
                 <el-dropdown-item>
                   <el-dropdown trigger="hover" placement="right-start">
                     <p>
-                      {{ familyObj[queryParams.family] }}<i class="el-icon-arrow-right el-icon--right"></i>
+                      {{ familyObj[queryParams.groupField] }}<i class="el-icon-arrow-right el-icon--right"></i>
                     </p>
                     <el-dropdown-menu slot="dropdown">
                       <el-dropdown-item v-for="(item, key) in familyObj" :key="key" @click.native="onChangeFamily(key)">{{
@@ -108,15 +107,15 @@
         <el-main v-loading="loading">
           <div class="height_100">
             <component ref="patentViewList" :is="viewSelected" @download="handleDownload" @change-read="handleChangeRead"
-              :projectId="projectId" :patentNoList.sync="patentNoList" @clickPatentNo="handleClick" :column="customList"
-              @index-setting="handleIndexSetting" @on-sort="handleSort" :queryParams="queryParams" :tableData="tableData"
-              :refresh='refresh'></component>
+              :projectId="projectId" :patentNoList.sync="patentNoList" @addSelect="getChoosePatentNo"
+              @clickPatentNo="handleClick" :column="customList" @index-setting="handleIndexSetting" @on-sort="handleSort"
+              :queryParams="queryParams" :tableData="tableData" :refresh='refresh'></component>
           </div>
         </el-main>
         <el-footer class="pagination" style="display:flex;justify-content:space-between;align-items:center">
           <div style="display:flex;align-items:center">
-            <span v-if="patentNoList.length > 0">
-              已勾选 <b>{{ patentNoList.length }}</b> 条
+            <span v-if="selectedTotal > 0">
+              已勾选 <b>{{ selectedTotal }}</b> 条
             </span>
             <el-popover placement="bottom" title="" width="220" trigger="click">
               <el-main class="patent-fast-edit-popover" v-loading="selectNumberLoading">
@@ -146,8 +145,9 @@
                     :disabled="!$permission('/workspace/folder/isRead')">已读</el-dropdown-item>
                   <el-dropdown-item @click.native="handleRead(0)"
                     :disabled="!$permission('/workspace/folder/isRead')">未读</el-dropdown-item>
-                  <el-dropdown-item @click.native="handleIndex"
-                    :disabled="!($permission('/workspace/folder/batchOperation/batchIndexing') && $r(projectId, [1, 2]))">批量标引</el-dropdown-item>
+                  <!-- <el-dropdown-item @click.native="handleIndex"
+                    :disabled="!($permission('/workspace/folder/batchOperation/batchIndexing') && $r(projectId, [1, 2]))">批量标引</el-dropdown-item> -->
+                  <el-dropdown-item @click.native="handleIndex">批量标引</el-dropdown-item>
                   <el-dropdown-item @click.native="checkPatentWorth"
                     v-if="patentNoList.length && $permission('/workspace/patent/worth')">价值曲线</el-dropdown-item>
                 </el-dropdown-menu>
@@ -177,6 +177,8 @@
     <reportFileDrawer ref="reportFileDrawer"></reportFileDrawer>
     <!-- 创建FTO报告 -->
     <addAndEditReport ref="addAndEditReport"></addAndEditReport>
+    <!-- 批量那个标引 -->
+    <PatentBatchIndexVue ref="PatentBatchIndexVue" :projectId="projectId"></PatentBatchIndexVue>
   </div>
 </template>
 
@@ -192,6 +194,7 @@ import customFields from '@/views/report/components/patentList/components/custom
 import searchPatent from '@/views/report/components/patentList/components/searchPatent.vue';
 import reportFileDrawer from '@/views/report/components/drawer/reportFileDrawer.vue'
 import addAndEditReport from '@/views/report/components/dialog/addAndEditReport.vue'
+import PatentBatchIndexVue from './components/dialog/PatentBatchIndex.vue'
 export default {
   components: {
     FieldDrawer,
@@ -203,6 +206,7 @@ export default {
     searchPatent,
     reportFileDrawer,
     addAndEditReport,
+    PatentBatchIndexVue,
   },
   props: {},
   data() {
@@ -244,10 +248,10 @@ export default {
       customList: [],
       //同族
       familyObj: {
-        0: '不区分同族',
-        1: '简单同族',
-        2: 'INPADOC同族',
-        3: '扩展同族',
+        '0': '不区分同族',
+        'simpleFamilyId': '简单同族',
+        'inpadocFamilyId': 'INPADOC同族',
+        'patsnapFamilyId': '扩展同族',
       },
       //页大小
       sizeArr: [10, 20, 30, 40, 50, 100],
@@ -255,22 +259,19 @@ export default {
       queryParams: {
         current: 1,
         size: 10,
-        family: 0
+        groupField: '0',
+        selected: [],
+        isAdd: [],
+        isDelete: [],
       },
       //总数
       total: 0,
       //排序
       sort: [],
-      //选择的专利集合
-      patentNoList: [],
       //加载
       loading: false,
       // 数据
       tableData: [],
-      //选择总数
-      selectedTotal: 0,
-      //选择专利加载
-      selectNumberLoading: false,
       //是否编辑//编辑按钮暂时隐藏,改为默认为true
       refresh: true,
       // 统计勾选的值(专利著录(专利本身))
@@ -279,6 +280,20 @@ export default {
       searchStr: '',
       // 存放自定义栏位的检索条件
       customFields: [],
+      /*选择专利变量start*/
+      //选择的专利集合
+      patentNoList: [],
+      //选择总数
+      selectedTotal: 0,
+      //选择专利加载
+      selectNumberLoading: false,
+      // 起始位置
+      startNumber: 1,
+      // 结束位置
+      endNumber: 0,
+      quickSelect: false,
+      quickSelectArr: [],
+      /*选择专利变量end*/
     };
   },
   watch: {},
@@ -394,23 +409,23 @@ export default {
       })
     },
     //检索
-    search(val) {
-      let params = {}
-      val.forEach(item => {
-        if (item.type == 3) {
-          params[item.value] = item.searchValue.map(itemValue => {
-            return itemValue.value
-          })
-        } else {
-          params[item.value] = item.searchValue.label
-        }
-      })
-      // 返回字符串
-      this.searchOption = params
-      // 调用查询接口
-      this.queryParams.current = 1
-      this.getList()
-    },
+    // search(val) {
+    //   let params = {}
+    //   val.forEach(item => {
+    //     if (item.type == 3) {
+    //       params[item.value] = item.searchValue.map(itemValue => {
+    //         return itemValue.value
+    //       })
+    //     } else {
+    //       params[item.value] = item.searchValue.label
+    //     }
+    //   })
+    //   // 返回字符串
+    //   this.searchOption = params
+    //   // 调用查询接口
+    //   this.queryParams.current = 1
+    //   this.getList()
+    // },
     //切换视图
     async handleChangeView(item) {
       this.viewSelected = item.value
@@ -431,16 +446,29 @@ export default {
         this.queryParams.size = size
       }
       let params = {
-        ...this.queryParams,//分页信息
+        ...this.queryParams,//分页信息及区分同族类型
         projectId: this.projectId,
         searchQuery: this.searchStr || '',//检索条件
         customFields: this.customFields || [],
         orderDTOList: this.sort,//排序信息
       }
+
+      // this.$store.commit("SET_PATENT_PARAMS", params);
+      this.$store.commit("SET_PATENT_RECORDS", []);
       this.$api.QueryPatent(params).then(res => {
         if (res.code == 200) {
           this.tableData = res.data.data
           this.total = res.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)
+          // this.$store.commit("SET_PATENT_PARAMS", params);
+          this.$store.commit("SET_PATENT_RECORDS", res.data.data);
+          if (this.quickSelect) {
+            this.commonSwitch()
+          }
+          this.isRefresh()
         }
       }).catch(error => {
         this.tableData = []
@@ -468,7 +496,7 @@ export default {
 
     //自定义栏位管理
     handleField() {
-      this.$refs.FieldDrawer.open(5)
+      this.$refs.FieldDrawer.open(this.projectId)
     },
     //获取自定义栏位
     getFieldList(data) {
@@ -492,7 +520,16 @@ export default {
       }
       this.$refs.addAndEditReport.open(form)
     },
-
+    //切换同族
+    onChangeFamily(key) {
+      this.queryParams.current = 1
+      this.queryParams.groupField = key
+      this.getList()
+    },
+    // 批量标引
+    handleIndex() {
+      this.$refs.PatentBatchIndexVue.open()
+    },
 
 
 
@@ -559,12 +596,7 @@ export default {
         }
       })
     },
-    //切换同族
-    onChangeFamily(key) {
-      this.queryParams.current = 1
-      this.queryParams.family = parseInt(key)
-      this.getList()
-    },
+
     //合并申请人
     handleMerge() {
       this.$refs.patentApplicantMergeDrawer.open(this.projectId)
@@ -630,6 +662,129 @@ export default {
     //   this.patentNoList = []
     //   // this.refresh = !this.refresh
     // },
+
+
+
+    // 是否刷新
+    isRefresh() {
+      this.refresh = false
+      this.$nextTick(() => {
+        this.refresh = true
+      })
+    },
+    //快速选择
+    handleSelectNumber(type) {
+      switch (type) {
+        case 0: //本页选择
+          this.patentNoList = [...new Set(this.patentNoList.concat(this.$store.state.patent.records.map((item) => item.patentNo))),];
+          this.queryParams.isAdd = [...new Set(this.queryParams.isAdd.concat(this.$store.state.patent.records.map((item) => item.patentNo))),];
+          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()
+      this.isRefresh()
+    },
+    //每页全部选择或范围选择的专利
+    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].patentNo)
+            }
+          } 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].patentNo)
+            }
+          }
+        } 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].patentNo)
+            }
+          } 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].patentNo)
+            }
+          }
+        }
+      }
+      // 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 = [];
@@ -642,8 +797,9 @@ export default {
       this.quickSelect = false
       this.selectedTotal = 0
       // this.getList()
+      this.isRefresh()
     },
-    //开始条数校验
+    // 范围选择起始数字框
     change1(val) {
       if (!isNaN(val)) {
         if (!val || val <= 0) {
@@ -657,7 +813,7 @@ export default {
         this.queryParams.startNumber = 1
       }
     },
-    //结束条数校验
+    // 范围选择截止数字框
     change2(val) {
       if (!isNaN(val)) {
         if (!val || val <= 0) {
@@ -671,37 +827,7 @@ export default {
         this.queryParams.endNumber = this.total
       }
     },
-    //快速选择
-    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()
-    },
+
   },
 };
 </script>

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

@@ -8,8 +8,8 @@
     <div class="list" v-if="[1,2,7].findIndex(item=>{return item == reportType}) == -1">
       <div class="left-patentNo"  v-for="(item,index) in patentList" :key="item.patentNo" :style="{background:(item.patentNo == patentNo)? '#cdd7eb':''}" @click="$emit('getPatentLeft',item.patentNo,index)">
         <div>{{ item.patentNo }}</div>
-        <my-tooltip :content="item.title.content" placement="bottom-start">
-          <div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">{{ item.title.content }}</div>
+        <my-tooltip :content="item.title.filter(item=> item.if_origin)[0].text_content" placement="bottom-start">
+          <div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">{{ item.title.filter(item=> item.if_origin)[0].text_content }}</div>
         </my-tooltip>
       </div>
     </div>

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

@@ -270,6 +270,8 @@ export default {
   computed: {},
   created() { },
   mounted() {
+    console.log(123);
+    
     this.getPatent()
   },
   methods: {

+ 7 - 7
src/views/project/patentDetails/components/patentMessage/PatentBasic.vue

@@ -103,7 +103,7 @@
                   <el-descriptions-item label="申请人" labelStyle="width:90px" v-if="patent.applicant" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
                    <div class="patent-basic-value" v-for="item in patent.applicant" :key="item">
                     <div class="margin-right_10">
-                      <span v-html="getViewDom(item.name,'申请人')"></span>
+                      <span v-html="getViewDom(item,'申请人')"></span>
                       <span v-if="item.shortName" v-html="'(标:'+getViewDom(item.shortName,'申请人')+')'"></span>
                     </div>
                    </div>
@@ -111,16 +111,16 @@
                 <el-descriptions-item label="申请人地址" labelStyle="width:90px" v-if="patent.applicant">
                    <div class="patent-basic-value" v-if="patent.applicantAddr" v-html="getViewDom(patent.applicantAddr.address,'申请人地址')"></div>
                 </el-descriptions-item>
-               <el-descriptions-item label="权利人" labelStyle="width:90px" v-if="patent.applicant && patent.applicant.filter(a => a.dataType === 1).length>0" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
-                 <div class="patent-basic-value" v-for="item in patent.applicant.filter(a => a.dataType === 1)" :key="item">
+               <el-descriptions-item label="权利人" labelStyle="width:90px" v-if="patent.rightHolder" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
+                 <div class="patent-basic-value" v-for="item in patent.rightHolder" :key="item">
                   <div class="margin-right_10">
-                    <span v-html="getViewDom(item.name,'权利人')"></span>
+                    <span v-html="getViewDom(item,'权利人')"></span>
                     <span v-if="item.shortName" v-html="'(标:'+getViewDom(item.shortName,'权利人')+')'"></span>
                   </div>
                  </div>
                </el-descriptions-item>
-                <el-descriptions-item label="权利人地址" labelStyle="width:90px" v-if="patent.applicant && patent.applicant.filter(a => a.dataType === 1).length>0">
-                  <div class="patent-basic-value"  v-if="patent.applicant.filter(a => a.dataType === 1)[0]"  v-html="getViewDom(patent.applicant.filter(a => a.dataType === 1)[0].addressStr,'权利人地址')"></div>
+                <el-descriptions-item label="权利人地址" labelStyle="width:90px" v-if="patent.rightHolderAddr">
+                  <div class="patent-basic-value"  v-if="patent.rightHolderAddr"  v-html="getViewDom(patent.rightHolderAddr.address,'权利人地址')"></div>
                 </el-descriptions-item>
                
                 <el-descriptions-item label="发明人" labelStyle="width:90px" v-if="patent.inventor && patent.inventor.length>0" contentStyle="display:flex;flex-direction: row;flex-wrap: wrap;justify-content: flex-start;">
@@ -130,7 +130,7 @@
                   <div class="patent-basic-value margin-right_10" v-for="item in patent.agent" :key="item"  v-html="getViewDom(item,'代理人')"></div>
                 </el-descriptions-item>
                 <el-descriptions-item label="代理机构" labelStyle="width:90px" v-if="patent.agency">
-                   <div v-if="patent.agency" class="patent-basic-value"  v-html="getViewDom(patent.agency.name,'代理机构')"></div>
+                   <div v-if="patent.agency" class="patent-basic-value"  v-html="getViewDom(patent.agency,'代理机构')"></div>
                 </el-descriptions-item>
             </el-descriptions>
               </el-tab-pane>

+ 76 - 71
src/views/project/patentDetails/components/patentMessage/PatentFamily.vue

@@ -5,9 +5,9 @@
         <el-form :inline="true" style="" v-if="projectId">
           <el-form-item label="同族类型">
             <el-select v-model="type" size="small" @change="onChange">
-              <el-option label="简单同族" :value="1"></el-option>
-              <el-option label="INPADOC同族" :value="2"></el-option>
-              <el-option label="扩展同族" :value="3"></el-option>
+              <el-option label="简单同族" value="simpleFamilyId"></el-option>
+              <el-option label="INPADOC同族" value="inpadocFamilyId"></el-option>
+              <el-option label="扩展同族" value="patsnapFamilyId"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="专利号">
@@ -20,15 +20,16 @@
       </el-header>
       <el-main>
         <el-table v-loading="loading" :data="tableData" header-row-class-name="custom-table-header">
-          <el-table-column label="摘要附图" align="center" min-width="120px" show-overflow-tooltip> 
+          <el-table-column label="摘要附图" align="center" min-width="120px" show-overflow-tooltip>
             <template slot-scope="scope">
               <div style="height: 150px;" class="picture">
-                <el-image v-if="scope.row.patentId !== -1 || (!projectId && scope.row.abstractPath2)" :src="scope.row.abstractPath2?scope.row.abstractPath2:getImagePath1(scope.row)" :preview-src-list="[scope.row.abstractPath2]"  :style="{width:style.width,height:style.height}">
+                <el-image :src="$commonJS.checkViewer(scope.row.pictureGuid)"
+                  :preview-src-list="[$commonJS.checkViewer(scope.row.pictureGuid)]"
+                  :style="{ width: scope.row.imgWidth ? scope.row.imgWidth : '100%', height: scope.row.imgHeight ? scope.row.imgHeight : '100%' }">
                   <div slot="error" class="image-slot">
                     <img src="https://www.patentstar.com.cn/img/Common/nopic.jpg" alt="">
                   </div>
                 </el-image>
-                <span v-else v-html="getViewDom(scope.row.name)"></span>
               </div>
             </template>
           </el-table-column>
@@ -39,33 +40,34 @@
           </el-table-column>
           <el-table-column label="专利名称" align="center" show-overflow-tooltip>
             <template slot-scope="scope">
-              <span v-html="getViewDom(scope.row.name)"></span>
+              <span v-html="getViewDom(scope.row, 'title')"></span>
             </template>
           </el-table-column>
           <el-table-column label="申请人" align="center" show-overflow-tooltip>
             <template slot-scope="scope">
-              <div v-if="scope.row.patentId !== -1">
-                <span v-for="item in scope.row.applicant.filter(a => a.dataType === 2)" :key="item.name">
-                  <span v-html="getViewDom(item.name)"></span> <span>;</span>
+              <!-- <div v-if="scope.row.patentId !== -1"> -->
+                <span v-for="item in scope.row.applicant" :key="item">
+                  <span v-html="getViewDom(item, '申请人')"></span> <span>;</span>
                 </span>
-              </div>
-              <span v-else v-html="getViewDom(scope.row.name)"></span>
+              <!-- </div>
+              <span v-else v-html="getViewDom(scope.row.name)"></span> -->
             </template>
           </el-table-column>
           <el-table-column label="权利人" align="center" show-overflow-tooltip>
             <template slot-scope="scope">
-              <div v-if="scope.row.patentId !== -1">
-                <span v-for="item in scope.row.applicant.filter(a => a.dataType === 1)" :key="item.name">
-                  <span v-html="getViewDom(item.name)"></span> <span>;</span>
+              <!-- <div v-if="scope.row.patentId !== -1"> -->
+                <span v-for="item in scope.row.rightHolder" :key="item">
+                  <span v-html="getViewDom(item, '权利人')"></span> <span>;</span>
                 </span>
-              </div>
-              <span v-else v-html="getViewDom(scope.row.name)"></span>
+              <!-- </div>
+              <span v-else v-html="getViewDom(scope.row.name)"></span> -->
             </template>
           </el-table-column>
         </el-table>
       </el-main>
       <el-footer class="pagination">
-        <el-pagination :current-page.sync="queryParams.current" :page-size="queryParams.size" :total="total" @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
+        <el-pagination :current-page.sync="queryParams.pageNum" :page-size="queryParams.pageSize" :total="total"
+          @current-change="handleCurrentChange" layout="total, prev, pager, next, jumper" background></el-pagination>
       </el-footer>
     </el-container>
   </div>
@@ -77,12 +79,11 @@ export default {
   mixins: [patentDetails],
   data() {
     return {
-      type: 1,
+      type: '0',
       queryParams: {
-        familyId: 0,
-        patentNo: '',
-        current: 1,
-        size: 10,
+        // familyId: 0,
+        pageNum: 1,
+        pageSize: 10,
       },
       loading: false,
       tableData: [],
@@ -91,12 +92,12 @@ export default {
   },
   watch: {
     patentId() {
-      this.queryParams.current = 1
+      this.queryParams.pageNum = 1
       this.onChange()
     },
-    patentNo(){
-      if(!this.projectId){
-        this.queryParams.current = 1
+    patentNo() {
+      if (!this.projectId) {
+        this.queryParams.pageNum = 1
         this.onChange()
       }
     }
@@ -107,70 +108,75 @@ export default {
   methods: {
     getList() {
       this.loading = true
-      this.$api.getPatentFamilyList(this.queryParams).then(response => {
+      let params = {
+        ...this.queryParams,
+        no: this.patent.patentNo,//专利号
+        type: this.type,//同族类型
+      }
+      this.$api.selectKinByPatentNo(params).then(response => {
         this.tableData = response.data.records
         this.total = response.data.total
         this.loading = false
       })
     },
-    getData(){
+    getData() {
       this.loading = true
-        var params = {
-            patentCell:5,
-            patentNo:this.patent.publicNo,
-            appNo:this.patent.applicationNo,
-            current:this.queryParams.current,
-            size:this.queryParams.size
-          }
-        this.$api.getPatentPart(params).then(response=>{
-            if(response.code == 200){
-              this.tableData = response.data.familyPatentResult.records
-              this.tableData.forEach(item=>{
-                this.getFamilyImage(item)
-              })
-              this.total = response.data.familyPatentResult.total
-              this.loading = false
-            }
-        }).catch(error=>{
-          this.tableData= []
-          this.total = 0
+      var params = {
+        patentCell: 5,
+        patentNo: this.patent.publicNo,
+        appNo: this.patent.applicationNo,
+        pageNum: this.queryParams.pageNum,
+        pageSize: this.queryParams.pageSize
+      }
+      this.$api.getPatentPart(params).then(response => {
+        if (response.code == 200) {
+          this.tableData = response.data.familyPatentResult.records
+          this.tableData.forEach(item => {
+            this.getFamilyImage(item)
+          })
+          this.total = response.data.familyPatentResult.total
           this.loading = false
-        })
+        }
+      }).catch(error => {
+        this.tableData = []
+        this.total = 0
+        this.loading = false
+      })
     },
-    getFamilyImage(patent){
+    getFamilyImage(patent) {
       var params = {
-        patentCell:4,
-        patentNo:patent.publicNo,
-        appNo:patent.applicationNo,
+        patentCell: 4,
+        patentNo: patent.publicNo,
+        appNo: patent.applicationNo,
       }
-       this.$api.getPatentPart(params).then(response=>{
-            if(response.code == 200){
-              if(Object.keys(response.data).length>0 && response.data.image.length>0){
-                this.$set(patent,'abstractPath2',response.data.image[0].url)
-              }else{
-                this.$set(patent,'abstractPath2','q')
-              }
-              
-              this.getHeight(patent.abstractPath2, patent)
-            }
-        })
+      this.$api.getPatentPart(params).then(response => {
+        if (response.code == 200) {
+          if (Object.keys(response.data).length > 0 && response.data.image.length > 0) {
+            this.$set(patent, 'abstractPath2', response.data.image[0].url)
+          } else {
+            this.$set(patent, 'abstractPath2', 'q')
+          }
+
+          this.getHeight(patent.abstractPath2, patent)
+        }
+      })
     },
     onChange() {
-      if(!this.projectId){
+      if (!this.projectId) {
         this.getData()
         return false;
       }
-      if (this.type === 1) {
+      if (this.type == 'simpleFamilyId') {
         this.queryParams.familyId = this.patent.simpleFamily
-      } else if(this.type === 2) {
+      } else if (this.type == 'inpadocFamilyId') {
         this.queryParams.familyId = this.patent.inpadocFamily
-      }else{
+      } else {
         this.queryParams.familyId = this.patent.patSnapFamily
       }
       this.getList()
     },
     handleCurrentChange(val) {
-      this.queryParams.current = val;
+      this.queryParams.pageNum = val;
       this.getList();
     },
   }
@@ -182,5 +188,4 @@ export default {
   .el-image {
     width: 100%;
   }
-}
-</style>
+}</style>

+ 4 - 4
src/views/project/patentDetails/components/patentMessage/PatentInstruction.vue

@@ -7,7 +7,7 @@
         </el-tabs>
       </el-header>
       <el-main>
-        <div v-html="getViewDom(patent.instruction, '说明书文本'+tabItem.label, tabItem.field)" :style="setStyle()" :data-type="'说明书文本'+tabItem.label"></div>
+        <div v-html="getViewDom(patent.publicFullText, '说明书文本'+tabItem.label, tabItem.field)" :style="setStyle()" :data-type="'说明书文本'+tabItem.label"></div>
       </el-main>
     </el-container>
   </div>
@@ -24,18 +24,18 @@ export default {
       tabs:[
         {
           label:'原文',
-          name:0,
+          name:'0',
           field:'manual'
         },
         {
           label:'译文',
-          name:1,
+          name:'1',
           field:'manualOut'
         },
       ],
       tabItem:{
           label:'原文',
-          name:0,
+          name:'0',
           field:'manual'
         },
     }

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

@@ -7,7 +7,8 @@
         </el-tabs>
       </el-header>
       <el-main>
-        <div v-if="name != 2" v-html="getViewDom(patent.claim[tabItem.field], '权利要求'+tabItem.label, tabItem.field)" :style="setStyle()" :data-type="'权利要求'+tabItem.label"></div>
+        <div v-if="name != 2" v-html="getViewDom(patent.claim, '权利要求'+tabItem.label, 'column')" :style="setStyle()" :data-type="'权利要求'+tabItem.label"></div>
+        
         <div v-else>
           <my-view>
             <div slot="left">
@@ -69,7 +70,6 @@ export default {
       tabItem:{
           label:'原文',
           name:'0',
-          field:'content'
         },
     };
   },

+ 66 - 64
src/views/project/patentDetails/index.vue

@@ -1,18 +1,21 @@
 <template>
-  <div class="height_100 article" :style="{'flex-direction':isRight?'row-reverse':'row'}">
-    <articleMenu @event="event" :value="showView" :reportType="reportType" :menu="menuList" :isRight="isRight" :projectId="projectId" :taskId="taskId" :searchOption="search.searchOption" :patentNo="patentNo" :location="search.location" @getPatentLeft="getPatentLeft" :handlerType="handlerType"></articleMenu>
+  <div class="height_100 article" :style="{ 'flex-direction': isRight ? 'row-reverse' : 'row' }">
+    <articleMenu @event="event" :value="showView" :reportType="reportType" :menu="menuList" :isRight="isRight"
+      :projectId="projectId" :taskId="taskId" :searchOption="search.searchOption" :patentNo="patentNo"
+      :location="search.location" @getPatentLeft="getPatentLeft" :handlerType="handlerType"></articleMenu>
     <div class="height_100 content">
-        <my-View :showView="showView" >
-            <div slot="left" style="width:100%">
-              <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :evidence="evidenceData"></notPatentDetails>
-              <!-- <Patent-Details :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></Patent-Details> -->
-              <component v-else :is='components' :patentNo="patentNo" :projectId="projectId" :taskId="taskId" :reportType="reportType" :isResult="isResult"></component>
-            </div>
-            <div slot="right" style="width:100%">
-              <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :evidence="evidenceData"></notPatentDetails>
-              <Patent-Details v-else :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></Patent-Details>
-            </div>
-        </my-View>
+      <my-View :showView="showView">
+        <div slot="left" style="width:100%">
+          <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :evidence="evidenceData"></notPatentDetails>
+          <!-- <Patent-Details :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></Patent-Details> -->
+          <component v-else :is='components' :patentNo="patentNo" :projectId="projectId" :taskId="taskId"
+            :reportType="reportType" :isResult="isResult"></component>
+        </div>
+        <div slot="right" style="width:100%">
+          <notPatentDetails v-if="evidenceType == 1" :projectId="projectId" :evidence="evidenceData"></notPatentDetails>
+          <Patent-Details v-else :patentNo="patentNo" :projectId="projectId" :taskId="taskId"></Patent-Details>
+        </div>
+      </my-View>
     </div>
     <teamwork ref="teamwork" :patentNo="patentNo" :projectId="projectId" :reportType="reportType"></teamwork>
   </div>
@@ -35,18 +38,18 @@ export default {
   props: {},
   data() {
     return {
-      showView:false,
-      isRight:false,
-      patentNo:this.$route.params.patentNo,
-      routeCount:this.$s.getSession('routeCount')||1,
-      components:'PatentDetails',
-      menuList:[],
-      evidenceData:{}
+      showView: false,
+      isRight: false,
+      patentNo: this.$route.params.patentNo,
+      routeCount: this.$s.getSession('routeCount') || 1,
+      components: 'PatentDetails',
+      menuList: [],
+      evidenceData: {}
     };
   },
   watch: {},
   computed: {
-    projectId(){
+    projectId() {
       return this.$route.query.projectId
     },
     taskId() {
@@ -55,13 +58,13 @@ export default {
     reportType() {
       return this.$route.query.reportType
     },
-    search(){
-      return this.$s.getSession('search')||{}
+    search() {
+      return this.$s.getSession('search') || {}
     },
     isResult() {
       return this.$route.query.isResult
     },
-    taskType(){
+    taskType() {
       return this.$route.query.taskType
     },
     handlerType() {//1外部人员0内部人员(只有外部协同人做协同任务才会传递)
@@ -70,73 +73,73 @@ export default {
     evidenceType() {//证据文献类型,专利类型:0;非专利:1
       return this.$route.query.evidenceType
     },
-    evidence(){
+    evidence() {
       return this.$route.query.evidence
     }
   },
-  created() {},
+  created() { },
   mounted() {
-    if(this.evidence){
+    if (this.evidence) {
       this.evidenceData = JSON.parse(this.evidence)
-    }else{
+    } else {
       this.evidenceData = this.evidence
     }
     this.getMenuPrice()
     this.getComponents()
   },
   methods: {
-      // 获取协同按钮
-      getMenuPrice() {
-        if (this.reportType == 4 && !this.taskId) {
-          this.menuList = [
-            {
-              content: '协同',
-              event: 'coordination',
-              icon: 'el-icon-s-custom',
-            }
-          ]
-        }
-      },
-    getComponents(){
-      if(this.taskType == '3' || this.taskType == '4'){
+    // 获取协同按钮
+    getMenuPrice() {
+      if (this.reportType == 4 && !this.taskId) {
+        this.menuList = [
+          {
+            content: '协同',
+            event: 'coordination',
+            icon: 'el-icon-s-custom',
+          }
+        ]
+      }
+    },
+    getComponents() {
+      if (this.taskType == '3' || this.taskType == '4') {
         this.components = 'tortContrast'
       }
     },
     //菜单事件
-    event(val){
+    event(val) {
       this[val]()
     },
     //对比
-    contrast(){
+    contrast() {
       this.showView = !this.showView
     },
     //设置左边或者右边
-    setting(){
+    setting() {
       this.isRight = !this.isRight
     },
     //返回
-    goBack(){
+    goBack() {
       var a = Number(this.routeCount)
       window.history.go(-a)
-      this.$s.setSession('routeCount',1)
+      this.$s.setSession('routeCount', 1)
     },
     //协同
-    coordination(){
+    coordination() {
       this.$refs.teamwork.open()
     },
-    getPatentLeft(val,sign) {
+    getPatentLeft(val, sign) {
       var evidenceType = null
       var evidence = {}
-      if(sign){
+      if (sign) {
         this.evidenceData = val
         this.patentNo = val.literatureNo
         evidenceType = val.type
-        evidence=JSON.stringify(val)
-      }else{
-        this.patentNo=val
+        evidence = JSON.stringify(val)
+      } else {
+        this.patentNo = val
       }
       this.routeCount = Number(this.routeCount) + 1
-      this.$s.setSession('routeCount',this.routeCount)
+      this.$s.setSession('routeCount', this.routeCount)
       this.$router.push(
         {
           path: '/patentDetails/' + this.patentNo,
@@ -144,8 +147,8 @@ export default {
             projectId: this.projectId,
             taskId: this.taskId,
             reportType: this.reportType,
-            evidenceType:evidenceType,
-            evidence:evidence
+            evidenceType: evidenceType,
+            evidence: evidence
           }
         }
       )
@@ -154,11 +157,10 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-.article{
-    display: flex;
-    
-    .content{
-      width:100%
-    }
-}
-</style>
+.article {
+  display: flex;
+
+  .content {
+    width: 100%
+  }
+}</style>

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

@@ -119,7 +119,7 @@ export default {
         this.getOptions(row)
       }
     },
-    // 检索条件取消时统计勾选项一并取消
+    // 检索条件取消时统计勾选项一并取消//待修改,需要考虑产品架构、技术分类、等id重复的情况
     close() {
       let data = this.searchPatentCheck
       // return